我想在C#4.0中使用async/await,我已经安装了以下软件包:
http://www.nuget.org/packages/Microsoft.Bcl.Async/
问题是我没有async/await关键字可用.
我正在使用带有SP1的VS2010.
谢谢.
Ste*_*ary 30
你不会得到比Jon Skeet更好的答案.
唯一支持的方式做到这一点是使用VS2012用Microsoft.Bcl.Async.
VS2010很难与async/ 一起工作await.有一个旧的Async CTP软件包(它有许多永远不会修复的bug)作为VS2010的"附加"/"部分替换".但是,该软件包在VS2010更新时从未运行良好.因此,您必须先找到一个旧的CTP安装程序的版本,然后安装一些 VS更新,然后查看CTP是否正常工作.如果您已经安装了所有VS2010更新,则不会有任何版本的CTP.我想一旦你找到可以安装工作CTP的更新情况,那么你可以安装其他更新.
完成所有这些工作之后,你仍然会遇到一个错误的(并且肯定是未被优化的)实现async.
或者,您可以像Jon Skeet建议的那样下载VS2012 Express的免费版本Microsoft.Bcl.Async并拥有完全支持的解决方案.
Car*_*ras 20
Async/Await已经推出了C# 5.0和.NET Framework 4.5
更多信息:
使用Async和Await进行异步编程(C#和Visual Basic)
如果您像在企业中一样使用Framework 4,则可以使用其他解决方法.您可以使用允许您使用这些功能的NuGet包.
在没有.NET Framework 4.5的情况下使用async/await
只需从NuGet包管理器安装它:
安装包Microsoft.Bcl.Async
从NuGet Gallery中提取:
此程序包使Visual Studio 2012项目能够使用新的"async"和"await"关键字.此包还包括基于任务的扩展方法,允许使用一些现有的异步API和新的语言关键字.Windows Phone Silverlight 8项目可以使用此程序包访问网络类型的异步扩展方法.
using System.Threading.Tasks;
private void simpleMethod()
{
var tsk = Task.Factory.StartNew(() => DoSomeWorkAsync());
Task.WaitAll(tsk);
DataTable table = tsk.Result;
}
Run Code Online (Sandbox Code Playgroud)
重要的是,异步方法不应包含任何影响表单控件的方法
private DataTable DoSomeWorkAsync()
{
System.Data.DataTable table = new System.Data.DataTable();
Thread.Sleep(4000); // Any long time process
return table;
}
Run Code Online (Sandbox Code Playgroud)
更多信息: https: //www.simplethread.com/net-40-and-systemthreadingtasks/