El operador Await solo se puede usar dentro de un método Async

Estoy tratando de hacer un progtwig simple para probar la nueva funcionalidad .NET async dentro de Visual Studio 2012. Generalmente uso BackgroundWorkers para ejecutar código que consume tiempo de forma asincrónica, pero a veces parece una molestia para una operación relativamente simple (pero costosa) . El nuevo modificador asíncrono parece que sería genial de usar, pero desafortunadamente parece que no puedo hacer una prueba simple.

Aquí está mi código, en una aplicación de consola 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 QueryRover() { await Task.Delay(5000); return "Doin' good!"; } 

Revisé algunos ejemplos en MSDN y me parece que este código debería estar funcionando, pero en su lugar obtengo un error de comstackción en la línea que contiene “aguardar QueryRover ();” ¿Me estoy volviendo loco o está pasando algo sospechoso?

Solo puede usar await en un método async , y Main no puede ser async .

Tendrá que usar su propio contexto compatible con la sincronización, invocar Wait en la Task devuelta en el método Main , o simplemente ignorar la Task devuelta y simplemente bloquear en la llamada a Read . Tenga en cuenta que Wait ajustará cualquier excepción en una AggregateException .

Si quieres una buena introducción, mira mi async post async / await .