Klasa zadania
Klasa Task to asynchroniczna abstrakcja operacji udostępniona po .NET 4.0, z pełną ścieżką do System.Threading.Tasks.Task.
Klasa Task służy do reprezentowania operacji asynchronicznych bez wartości zwrotnej, a dla operacji asynchronicznych z wartościami zwracanymi należy użyć podklasy Task klasy Task<TResult>. Zadania utworzone przez klasę Task są dodawane do puli wątków.
<TResult>Głównymi konstruktorami klasy Task/Task są następujący:
Po utworzeniu zadania można rozpocząć metodą Start():
W rzeczywistym rozwoju statyczna metoda Run() klasy Task lub metoda członkowska StartNew() klasy factory TaskFactory są częściej używane do tworzenia i uruchamiania nowych zadań.
Niektóre popularne metody w klasie Zadania:
słowo kluczowe async/await
C# 5.0 wprowadził słowa kluczowe async i await, co zapewniło lepsze wsparcie dla współbieżności na poziomie językowym.
Async jest używany do oznaczania metod asynchronicznych: Asynchroniczne słowo kluczowe jest kontekstowym i będzie traktowane jako słowo kluczowe tylko podczas modyfikacji metody i Lambdy, a w innych obszarach traktowane jako identyfikator. Asynchroniczne słowo kluczowe może oznaczać metody statyczne, ale nie punkty wejścia (metody Main().
Wartość zwracana metody oznaczonej jako async musi być <TResult>Zadanie, Zadanie lub Void. await służy do oczekiwania na wynik metody asynchronicznej:
Słowo kluczowe oczekuj jest również kontekstowym słowem kluczowym i jest traktowane jako słowo kluczowe tylko w asynchronicznej metodzie tagowanej. Słowo kluczowe await może być użyte przed metodą asynchroniczną, a Task, i <TResult>Task, aby oczekiwać na zakończenie asynchronicznego wykonania zadania. Prosta struktura metody asynchronicznej wygląda następująco:
Nie chodzi o to, że metoda jest oznaczona asynchronicznym słowem kluczem, jest to metoda asynchroniczna, a instrukcje pojawiające się bezpośrednio wewnątrz metody asynchronicznej są również wykonywane synchronicznie,Treść wykonywana asynchronicznie musi być wykonywana za pomocą klasy Task。 W rzeczywistości metoda asynchroniczna, która nie zawiera żadnych instrukcji oczekiwania, zostanie wykonana synchronicznie, po czym kompilator wyda ostrzeżenie.
Prosty przykład, używanie async/await do jednoczesnego wyświetlania treści na ekranie:
Wyjście: (Mono 4.4.0 & ArchLinux x64)
Nie jest trudno zauważyć z powyższego programu, że w asynchronicznej metodzie oznaczonej słowem kluczowym jako asynchroniczne, kod przed użyciem await jest wykonywany synchronicznie, a po wywołaniu await pozostały kod działa asynchronicznie na osobnym wątku.
|