2012-08-06 10 views
56

Sto provando a creare un semplice programma per testare la nuova funzionalità async .NET in Visual Studio 2012. Generalmente utilizzo BackgroundWorkers per eseguire codice in termini di tempo in modo asincrono, ma a volte sembra una seccatura per un'operazione relativamente semplice (ma costosa). Il nuovo modificatore asincrono sembra che sarebbe bello da usare, ma sfortunatamente non riesco a far funzionare un semplice test.L'operatore di attesa può essere utilizzato solo all'interno di un metodo Async

Ecco il mio codice, in un'applicazione C# console:

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!"; 
} 

Ho controllato alcuni esempi su MSDN e sembra a me come questo codice dovrebbe funzionare, ma invece sto ottenendo un errore di generazione su la riga che contiene "await QueryRover();" Sto impazzendo o succede qualcosa di strano?

risposta

66

È possibile utilizzare solo await in un metodo async e Main cannot be async.

Dovrete utilizzare il proprio async contesto compatibile, chiamare Wait sul restituita Task nel metodo Main, o semplicemente ignorare la tornati Task e proprio bloccare sulla chiamata a Read. Si noti che Wait eseguirà il wrapping di eventuali eccezioni in un AggregateException.

Se si desidera una buona introduzione, consultare il mio async/await intro post.

Problemi correlati