Await/async引用错误
本文关键字:错误 引用 async Await | 更新日期: 2023-09-27 18:05:34
我试图在一些函数返回字符串做一些异步操作。
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!我在windows桌面使用俄文版的ms vs express 2012,所以这里是错误的翻译:
无法找到'async'修饰符所需的所有类型。您的目标是错误的框架版本,还是缺少对程序集的引用?
和两个错误:
预定义类型"System.Runtime.CompilerServices"。没有定义或导入IAsyncStateMachine
我找不到那个参考文献。我试过使用async/await之前,它工作得很好,现在我做的都是一样的,它不是。我错过了什么?
-
在thr_calc中使用:
return zzztest()
-
另外,请确保您的项目已设置为使用。net 4.5或更高版本(这是引入"async"的时候)
在一个。net 4.0项目中,我解析了'预定义类型'System.Runtime.CompilerServices。通过从nuget安装Microsoft.Bcl.Async包,IAsyncStateMachine'未定义或导入'。在VS的nuget包管理器中,搜索"bcl"并安装看起来像async的那个。
如果zzztest
是一个长时间运行的操作,您可以这样做以在后台线程中运行:
async private Task<string> thr_calc(object sender, EventArgs e)
{
return await Task.Run<string>(() => zzztest());
}
以上应该也能解决你的编译错误。
如果zzztest
不是长期运行的操作,则考虑不使用await
/async