Sobes.tech
Middle

Jak działa asynchroniczna metoda w C#?

sobes.tech AI

Odpowiedź od AI

Metoda asynchroniczna w C# pozwala na wykonywanie operacji, które mogą zająć dużo czasu (np. wejście/wyjście, żądania sieciowe), bez blokowania głównego wątku wykonawczego.

Wywołując metodę asynchroniczną oznaczoną słowem kluczowym async, kontrola jest przekazywana do kodu wywołującego aż do zakończenia operacji asynchronicznej. Operacja ta jest wykonywana w tle (np. przy użyciu puli wątków lub mechanizmów wejścia/wyjścia systemu).

Słowo kluczowe await wewnątrz metody asynchronicznej wskazuje miejsce, w którym operacja asynchroniczna może zostać zawieszona. Gdy wykonanie osiąga await, kontrola jest zwracana do kodu wywołującego, a kontynuacja metody jest planowana do wykonania, gdy oczekiwana operacja się zakończy.

Wynik operacji asynchronicznej (lub wyjątek) jest następnie przekazywany z powrotem do kontynuacji metody asynchronicznej, gdzie jest przetwarzany. Stan metody asynchronicznej jest automatycznie zarządzany przez kompilator C#, który przekształca ją w automat skończony.

public async Task<string> GetDataAsync(string url)
{
    // Symulacja długotrwałej operacji wejścia/wyjścia
    using (var httpClient = new HttpClient())
    {
        string result = await httpClient.GetStringAsync(url); // await: wykonanie metody może zostać zawieszone
        return result;
    }
}

// Przykład wywołania metody asynchronicznej
public async Task ProcessDataAsync(string url)
{
    Console.WriteLine("Rozpoczęcie ładowania danych...");
    string data = await GetDataAsync(url); // Oczekiwanie na zakończenie operacji asynchronicznej
    Console.WriteLine("Dane załadowane: " + data.Length + " znaków.");
}