如何在Visual Studio 2010和.NET 4.0中使用异步?

10

我想给当前的VS 2010 .NET 4.0 C#项目添加异步支持。

我找到了:

我甚至不知道它们之间的真正区别。

我已经安装了它们两个。Visual Studio Async CTP(版本3)、Microsoft.Bcl 和 Microsoft.Bcl.Async。(还在Microsoft.Bcl中运行了tools\portable-net40+sl4+win8+wp71\install.ps1

但仍然看不到任何效果。相同的错误信息。

public async Task<CommResponse>

->

Error   37  The type or namespace name 'async' could not be found (are you missing a using directive or an assembly reference?)

这个东西真实存在吗?我应该如何使用它?


1
@cvraman 抱歉,但我在那里找不到任何能帮助我的答案。因为他们说异步 CTP 对他们有用,但对我来说不是这样。 - cnd
1
你是否添加了对 AsyncCTPLibrary.dll 的引用?在“解决方案资源管理器”中,右键单击您的项目并选择“添加引用”。您应该会看到一个“浏览”部分,您可以通过它添加库。您可以在 Microsoft Visual Studio Async CTP/Samples 下的 Documents 文件夹中找到它。您可能需要创建一个新项目来测试一下,以防万一... - pcnThird
我会将其转化为答案并加以详细说明。 - zmbq
1
@Heather:如果你购买了带有MSDN订阅的VS2012,你将免费获得VS2013。 - Stephen Cleary
@StephenCleary 谢谢,这对我来说是新知识,但据我所知,MSDN订阅费用很高。 - cnd
显示剩余14条评论
2个回答

4

我认为你不应该这样做。Visual Studio 2010 版本的 async/await 更多是一个预览,而不是其他什么。如果你想在真正的生产级别代码中使用它,你应该升级到 Visual Studio 2012(或者如果可以稍等一会儿,可以升级到 2013)。

如果你不需要在真正的生产代码中使用 Visual Studio Pro,并且只是玩弄一下,那么你可以使用 Visual Studio 2012 Express。


Async CTP由于安装程序的工作方式而存在许多安装问题。@Heather,请查看MSDN论坛;缺少Async CTP目录是这种情况的明确迹象。如果您在发布CTP时正确安装了它,则可以正常工作,但如果您在CTP之前安装了其他VS更新,则会出现问题。微软不会修复这个问题;前进的唯一方法是使用VS2012。 - Stephen Cleary
这个主题变得太复杂了,已经超出了VS2010的实际解决方案范围,我甚至找不到更好的解决方案,搜索了很久也没有结果,所以我将尝试避免在2010中使用异步。升级到更新版本对我来说完全是另一个问题,但我将其设置为解决方案以关闭此问题。 - cnd

-1

我正在做类似的事情(我正在VS2010中编写一个RestApiLibrary,借鉴了一个VS2017项目),发现以下网址很有帮助。

https://code.msdn.microsoft.com/Introduction-to-HttpClient-4a2d9cee

最主要的帮助是:

        // Send a request asynchronously continue when complete 
        client.GetAsync(_address).ContinueWith( 
            (requestTask) => 
            { 
                // Get HTTP response from completed task. 
                HttpResponseMessage response = requestTask.Result; 

                // Check that response was successful or throw exception 
                response.EnsureSuccessStatusCode(); 

'ContinueWith'方法和'.Result'属性似乎是在VS2010中(以某种方式)使用异步函数的关键。请注意,我怀疑它的行为方式不符合传统的异步方式,但至少这样可以在VS2010中使用异步方法。

希望这可以帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接