2012-08-06 31 views
56

Estoy intentando hacer un programa simple para probar la nueva funcionalidad asincrónica .NET en Visual Studio 2012. Generalmente uso BackgroundWorkers para ejecutar código que consume mucho tiempo de forma asíncrona, 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.El operador Await solo se puede utilizar en un método Async

Aquí está mi código, en una aplicación de consola de 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!"; 
} 

Fui a ver algunos ejemplos en MSDN y se ve a mí como el código debe estar funcionando, pero en cambio estoy recibiendo un error de generación de la línea que contiene "espera QueryRover();" ¿Me estoy volviendo loco o está pasando algo sospechoso?

Respuesta

66

Solo puede usar await en un método async y Main cannot be async.

Vas a tener que utilizar su propio contexto async compatible, llame Wait en el Task devuelto en el método Main, o simplemente ignorar la Task vuelto y simplemente bloquear en la llamada a Read. Tenga en cuenta que Wait ajustará cualquier excepción en un AggregateException.

Si quieres una buena intro, mira mi async/await intro post.

Cuestiones relacionadas