等待运营商只能在一个asynchronous方法内使用

我试图做一个简单的程序来testingVisual Studio 2012中新的.NETasynchronousfunction。我通常使用BackgroundWorkersasynchronous运行耗时的代码,但有时它似乎是一个相对简单的(但昂贵的)操作的麻烦。 新的asynchronous修改器看起来会很好用,但不幸的是,我似乎无法得到一个简单的testing。

这是我的代码,在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上的例子,它看起来像这样的代码应该工作,但相反,我得到一个包含“await QueryRover();”行上的生成错误“ 我疯了还是有什么可疑的发生?

您只能在async方法中使用await ,而Main不能是async

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

如果你想要一个很好的介绍,看看我的async / await介绍post 。