2013-09-16 3 views
12

Sono completamente confuso dall'intero pattern attesa/asincrono in C#.In attesa di un metodo non asincrono

Ho un'app per moduli e voglio chiamare un metodo che impiega 20 secondi per eseguire una tonnellata di elaborazione. Quindi voglio await it. Ho pensato che il modo corretto fosse contrassegnarlo come async Task ma facendo questo si genera un avviso perché non uso await ovunque all'interno di esso.

Un google ha rivelato qualcosa sulla restituzione di un TaskCompletionSource<T> ma non ho un tipo di ritorno, poiché è nullo.

Come posso chiamare questo metodo utilizzando await?

+3

'async' non esegue il metodo su un thread in background; Ho un'introduzione ['async' /' await'] (http://blog.stephencleary.com/2012/02/async-and-await.html) che potresti trovare utile. –

risposta

35

Chiamate il metodo come segue:

await Task.Run(() => YourMethod()); 

Quando si utilizza il metodo Task.Run crea un compito awaitable per voi.

+0

Task.Run esegue "YourMethod" sul thread dell'interfaccia utente principale o crea un nuovo thread? (ad esempio WinForms) – harag