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之前,它工作得很好,现在我做的都是一样的,它不是。我错过了什么?

Await/async引用错误

  • 在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