Jak używać słowa kluczowego await w C#?
sobes.tech AI
Odpowiedź od AI
Słowo kluczowe await jest używane w C# do oczekiwania na zakończenie operacji asynchronicznej w sposób nieblokujący.
Użycie await jest możliwe tylko wewnątrz metod asynchronicznych oznaczonych modyfikatorem async.
Gdy wykonanie osiąga instrukcję await, przepływ sterowania wraca do wywołującego, a metoda jest "wstrzymana" do momentu zakończenia oczekiwanej zadania. Po zakończeniu zadania, wykonanie metody jest wznawiane od miejsca, w którym zostało zatrzymane.
To pozwala zwolnić wywołujący wątek (np. wątek interfejsu użytkownika lub serwera web) do wykonywania innych zadań, zwiększając responsywność i skalowalność aplikacji.
public async Task<string> GetDataAsync()
{
// Symulacja długotrwałej operacji asynchronicznej
await Task.Delay(2000);
return "Dane otrzymane";
}
public async Task ProcessDataAsync()
{
Console.WriteLine("Rozpoczęcie przetwarzania...");
string result = await GetDataAsync(); // Czekamy na zakończenie GetDataAsync bez blokowania
Console.WriteLine($"Wynik: {result}");
Console.WriteLine("Przetwarzanie zakończone.");
}
Słowo kluczowe await można stosować do:
- Zadań (Task, Task<T>, ValueTask, ValueTask<T>): najczęstszy scenariusz.
- typów awaitable: obiektów, które mają metodę
GetAwaiter(), zwracającą typ z metodamiIsCompleted,GetResult()iOnCompleted()(w celu obsługi kontynuacji).
Użycie await sprawia, że kod asynchroniczny jest bardziej czytelny i przypomina kod synchroniczny, eliminując konieczność ręcznego pisania kodu kontynuacji lub korzystania z callbacków.