Sobes.tech
Junior

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:

  1. Zadań (Task, Task<T>, ValueTask, ValueTask<T>): najczęstszy scenariusz.
  2. typów awaitable: obiektów, które mają metodę GetAwaiter(), zwracającą typ z metodami IsCompleted, GetResult() i OnCompleted() (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.