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

时间:2013-10-17 09:44:35

标签: c# async-await

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

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

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

我正在使用带有SP1的VS2010。

感谢。

4 个答案:

答案 0 :(得分:27)

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

唯一支持的方法是将 VS2012 Microsoft.Bcl.Async一起使用。

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

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

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

答案 1 :(得分:19)

Async/AwaitC# 5.0

引入了

.NET Framework 4.5

此处提供更多信息:

Asynchronous Programming with Async and Await (C# and Visual Basic)

Asynchronous Programming in C# 5.0 using async and await

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

Using async/await without .NET Framework 4.5

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

  

Install-Package Microsoft.Bcl.Async

摘自NuGet Gallery

  

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:-2)

using System.Threading.Tasks;

private void simpleMethod()
{
    var tsk = Task.Factory.StartNew(() => DoSomeWorkAsync());
    Task.WaitAll(tsk);
    DataTable table = tsk.Result;
}

重要的是,异步方法不应包含任何会影响表单控件的方法

    private DataTable DoSomeWorkAsync()
    {           
        System.Data.DataTable table = new System.Data.DataTable();
        Thread.Sleep(4000); // Any long time process
        return table;
    }

更多信息:https://www.simplethread.com/net-40-and-systemthreadingtasks/