Await运算符只能在Async方法中使用

时间:2012-08-06 21:36:26

标签: c# .net build .net-4.5 async-await

我试图创建一个简单的程序来测试Visual Studio 2012中新的.NET异步功能。我通常使用BackgroundWorkers异步运行耗时的代码,但有时候看起来像是一个相对简单的麻烦(但价格昂贵)操作。新的异步修改器看起来很好用,但不幸的是我似乎无法进行简单的测试。

这是我的代码,在C#控制台应用程序中:

static void Main(string[] args)
{
    string MarsResponse = await QueryRover();
    Console.WriteLine("Waiting for response from Mars...");
    Console.WriteLine(MarsResponse);
    Console.Read();
}

public static async Task<string> QueryRover()
{
    await Task.Delay(5000);
    return "Doin' good!";
}

我在MSDN上查看了一些示例,它在我看来这个代码应该正常工作,但我在包含&#34;等待QueryRover();&#34;的行上得到了构建错误。我疯了还是发生了什么蠢事?

1 个答案:

答案 0 :(得分:72)

您只能在await方法和Main cannot be async中使用async

您必须使用自己的async兼容上下文,在Wait方法中的返回Task上调用Main,或者忽略返回的{{ 1}}并阻止对Task的调用。请注意,Read将在Wait中包含任何例外。

如果您想要一个好的介绍,请参阅我的async/await intro post