async / await关键字在.net 4.0中不可用

我想在C#4.0中使用async / await,我已经安装了以下软件包:

http://www.nuget.org/packages/Microsoft.Bcl.Async/

问题是我没有async / await关键字可用。

我正在使用带有SP1的VS2010。

谢谢。

你不会得到比Jon Skeet更好的答案。

唯一支持的方法是使用VS2012Microsoft.Bcl.Async

VS2010非常难以使用async / await 。 有一个旧的Async CTP软件包(它有许多永远不会修复的bug)作为VS2010的“附加”/“部分替换”。 但是,该软件包在VS2010更新时从未运行良好。 因此,您必须先找到一个旧CTP安装程序的版本,然后安装一些 VS更新,然后查看CTP是否正常工作。 如果您已经安装了所有VS2010更新,则不会有任何版本的CTP。 我一旦你找到可以安装工作CTP的更新情况, 那么你可以安装其他更新。

完成所有这些工作后,您仍然会遇到async错误(并且绝对未经优化)的实现。

或者 ,您可以像Jon Skeet建议的那样,使用Microsoft.Bcl.Async下载VS2012 Express的免费版本,并获得完全支持的解决方案。

已经在C# 5.0.NET Framework 4.5引入了Async/Await

更多信息:

使用Async和Await进行异步编程(C#和Visual Basic)

使用async和await在C#5.0中进行异步编程

如果您像在企业中一样使用Framework 4 ,则可以使用其他解决方法。 您可以使用允许您使用这些function的NuGet包。

在没有.NET Framework 4.5的情况下使用async / await

只需从NuGet包管理器安装它:

安装包Microsoft.Bcl.Async

从NuGet Gallery中提取:

此程序包使Visual Studio 2012项目能够使用新的“异步”和“等待”关键字。 此程序包还包括基于任务的扩展方法,允许使用一些现有的异步API和新的语言关键字。 Windows Phone Silverlight 8项目可以使用此程序包来访问网络类型的异步扩展方法。

我已经使用async为.NET 4.0应用程序编写了一个.NET 4.5插件,令我惊讶的是它确实有效!

我认为这很有效,因为我安装了.NET 4.5,它将.NET 4运行时替换为更新版本,用于.NET 4.0和.NET 4.5。 然后我的插件使用Assembly.Load(...)或类似的方式加载reflection。 我尝试了async/awaitEnvironment.CurrentManagedThreadId (.NET 4.5属性),两者都有效。

因此,如果安装.NET 4.5是一个选项(即不支持Windows XP),可以通过reflection加载应用程序的.NET 4.5部分来使用混合,可能让4.5部分实现4.0接口。 但是,如果您自己编写应用程序,那么更简单的解决方案是切换到整个项目的.NET 4.5。