2013-09-16 20 views
12

Jestem całkowicie zdezorientowany przez cały oczekujący/asynchroniczny wzór w C#.Oczekując na metodę asynchroniczną

Mam aplikację formularzy i chcę wywołać metodę, która zajmuje 20 sekund, aby wykonać tonę przetwarzania. Dlatego chcę await go. Pomyślałem, że poprawną metodą jest oznaczenie go jako async Task, ale w ten sposób wygeneruje ostrzeżenie, ponieważ nie używam w nim żadnej z nich.

Google ujawnił coś o zwrocie TaskCompletionSource<T>, ale nie mam typu zwrotu, ponieważ jest nieważny.

Jak mogę wywołać tę metodę za pomocą await?

+3

'async' nie wykonuje metody na wątku tła; Mam wprowadzenie ['async' /' await'] (http://blog.stephencleary.com/2012/02/async-and-await.html), które może ci się przydać. –

Odpowiedz

35

Zadzwoń metodę w następujący sposób:

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

Podczas korzystania z metody Task.Run to tworzy awaitable zadanie dla Ciebie.

+0

Czy Task.Run uruchamia "YourMethod" w głównym wątku UI, czy tworzy nowy wątek? (np. WinForms) – harag

Powiązane problemy