等待/异步引用错误

时间:2013-03-22 16:24:45

标签: c# reference compiler-errors async-await

我试图在一些返回字符串的函数中做一些异步操作。

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并且工作正常,现在我正在做所有相同而不是。我缺少什么?

3 个答案:

答案 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