async private void button1_Click(object sender, EventArgs e)
{
string output = await thr_calc(this, null);
}
async private Task<string> thr_calc(object sender, EventArgs e)
{
return await zzztest();
}
string zzztest()
{
string asd;
//some stuff here
return asd;
}
但是它给了我每个字符串包含单词async / await的错误!我使用俄语版的ms vs express 2012 for windows desktop,所以这里是错误的翻译:
找不到'async'修饰符所需的所有类型。您是针对错误的框架版本,还是缺少对程序集的引用?
还有2个错误:
未定义或导入预定义类型'System.Runtime.CompilerServices.IAsyncStateMachine'
我找不到这个参考。我之前尝试过使用async / await并且工作正常,现在我正在做所有相同而不是。我缺少什么?
答案 0 :(得分:17)
在thr_calc中,使用:
return zzztest()
此外,请确保您已将项目设置为使用.Net 4.5或更高版本(即“async”引入时)
答案 1 :(得分:7)
在.NET 4.0项目中,我解决了'预定义类型'System.Runtime.CompilerServices.IAsyncStateMachine'未定义或导入',方法是从nuget安装Microsoft.Bcl.Async包。在VS的nuget包管理器中,搜索“bcl”并安装异步查找。
答案 2 :(得分:2)
如果zzztest
是一个长时间运行的操作,你可以这样做在后台线程中运行它:
async private Task<string> thr_calc(object sender, EventArgs e)
{
return await Task.Run<string>(() => zzztest());
}
以上内容也可以解决您的编译错误。
如果zzztest
不是长时间运行的操作,请考虑不使用await
/ async
。