等待运算符只能在异步方法中使用

79

我正在尝试创建一个简单的程序来测试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();”的那一行却出现了编译错误。是我疯了还是出了什么问题?

1个回答

80

你只能在async方法中使用await,而Main方法无法使用async

你可以使用自己的async兼容上下文,在Main方法中调用返回的TaskWait方法,或者只是忽略返回的Task并阻塞在对Read方法的调用上。请注意,Wait会将任何异常包装在AggregateException中。

如果你想要一个好的介绍,请看我的async/await的入门文章


9
C# 7现在也支持异步的Main方法。 - Ammar Shaukat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接