78

我正在尝试制作一个简单的程序来测试 Visual Studio 2012 中的新 .NET 异步功能。我通常使用 BackgroundWorkers 异步运行耗时的代码,但有时对于相对简单(但昂贵)的操作来说似乎很麻烦. 新的 async 修饰符看起来很好用,但不幸的是我似乎无法进行简单的测试。

这是我在 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();”的行上出现了构建错误。我是疯了还是发生了什么可疑的事情?

4

1 回答 1

78

只能awaitasync方法中使用,Main不能是async

您必须使用自己的async- 兼容上下文,在方法中调用Wait返回,或者只是忽略返回并阻止对. 请注意,这会将任何异常包装在.TaskMainTaskReadWaitAggregateException

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

于 2012-08-06T21:52:09.647 回答