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

我正在尝试制作一个简单的程序来测试 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();”的行上出现了构建错误我是疯了还是发生了什么可疑的事情?

最佳答案

您只能使用 awaitasync方法和 Main cannot be async .

您必须使用自己的 async - 兼容的上下文,调用 Wait返回 TaskMain方法,或者忽略返回的 Task并阻止对 Read 的调用.请注意 Wait将所有异常都包含在 AggregateException 中.

如果你想要一个好的介绍,请看我的 async / await intro post .

https://stackoverflow.com/questions/11836325/

相关文章:

jenkins - 如何在 Jenkins 中安排构建?

java - 何时使用 gradle.properties 与 settings.gradle?

visual-studio-2010 - 除非我手动选择 "Rebuild",否则 Visual S

c# - 使用 Visual Studio 2010 从命令行构建 C# 解决方案

visual-studio - Visual Studio 构建速度非常慢

visual-studio-2010 - Visual Studio 2010 说在我更改源文件后构

linux - 典型的 ./configure 在 Linux 中做了什么?

maven-2 - Maven - 如何将任意类路径条目添加到 jar?

build - 如何从 Jenkins 的另一份工作中提升特定的内部版本号?

android - Android 应用中的自动递增版本代码