2013-05-03 13 views
7

Mam aplikację, która będzie ładować pliki. Nie chcę, aby moja aplikacja zatrzymała się podczas przesyłania pliku, więc chcę wykonać to zadanie asynchronicznie. Mam coś takiego:Czy nie można czekać na wywołanie metody async?

class Program 
{ 
    static void Main(string[] args) 
    { 
     //less than 5 seconds 
     PrepareUpload(); 
    } 

    private static async Task PrepareUpload() 
    { 
     //processing 

     await Upload(); 

     //processing 
    } 

    private static Task Upload() 
    { 
     var task = Task.Factory.StartNew(() => System.Threading.Thread.Sleep(5000)); 

     return task; 
    } 
} 

Wyjątki są traktowane wewnętrznie, więc nie stanowi to problemu.

Czy można używać async/away jak sesji zdjęciowej i zapomnieć w ten sposób?

+0

Tak. Jeśli nie musisz czekać, nie czekaj. – SimpleVar

+0

Czy to nie jest zła praktyka? –

+1

Jest to zbyt proste, aby można je było uznać za praktykę. Jest to operacja, której możesz użyć lub nie, w zależności od potrzeb w konkretnym kontekście. – SimpleVar

Odpowiedz

9

W aplikacji konsolowej musiszczekać. W przeciwnym razie aplikacja zakończy działanie, kończąc wszystkie wątki w tle i operacje asynchroniczne, które są w toku.

+0

To tylko przykład logiki, rzeczywisty kod to aplikacja formularzy i nie kończy się po przesłaniu. –

+0

W takim przypadku dobrze jest zrobić ognisko i zapomnieć, jeśli jesteś pewien, że chcesz. IMO, równie łatwo można "na to" czekać. –

+0

Ale oczekiwanie na to zawiesiłoby aplikację do momentu zakończenia ładowania, nie? –

Powiązane problemy