2012-08-06 21 views
56

我想做一個簡單的程序來測試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上的一些例子,它看起來對我來說,這個碼應該是工作,而是我得到一個編譯錯誤包含「await QueryRover();」的行我會發瘋還是有點可疑?

回答

66

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

你將不得不使用自己的async兼容的情況下,在Main方法調用的返回TaskWait,或只是忽略返回Task,只是在電話會議上阻止對Read。請注意,Wait將在AggregateException中包含任何例外。

如果你想要一個很好的介紹,請看我的async/await intro post