CodeBlanks Logo Icon CodeBlanks

Task.WhenAll

C# kursu · İleri seviye · Ders 9/83

Task.WhenAll ile birden çok task'ı beklemeyi öğrenirsin.

Task.WhenAll

Task.WhenAll birden fazla Task'ın hepsinin bitmesini bekler. Bir dizi Task'ı tek bir Task olarak birleştirir; hepsi tamamlanınca sonuçları toplu verir. Örnek: await Task.WhenAll(t1, t2, t3);.

Sonuçlu Task'lar için Task<T[]> döner: int[] results = await Task.WhenAll(t1, t2);. Herhangi bir task hata verirse WhenAll hata fırlatır; ancak diğer task'lar yine de tamamlanır.

WhenAll sonuçları

Sonuçlu Task'ları WhenAll ile beklediğinde sonuçlar bir dizi olarak gelir. Örnek: Task<int> t1 = Task.FromResult(10);, Task<int> t2 = Task.FromResult(20);; sonra int[] arr = await Task.WhenAll(t1, t2);. Dizi sırası Task sırasıyla aynıdır.

Sonuçları toplamak için arr.Sum() ya da arr[0] + arr[1] kullanabilirsin. Bu, paralel işlerin sonuçlarını tek seferde toplamanın temiz yoludur.

Uygulama WhenAll ile topla

static Task<int> GetA() tanımla (return Task.FromResult(10);). static Task<int> GetB() tanımla (return Task.FromResult(20);). Main'i static async Task Main yap. int[] arr = await Task.WhenAll(GetA(), GetB()); ile bekle, Console.WriteLine(arr[0] + arr[1]); ile toplamı yazdır.

Örnek çözümü göster
Task.FromResult(10) ve Task.FromResult(20). Main'i static async Task Main() yapıp int[] arr = await Task.WhenAll(GetA(), GetB()); Console.WriteLine(arr[0] + arr[1]);
Örnek çözüm:
using System;
using System.Threading.Tasks;

class Program
{
    static Task<int> GetA()
    {
        return Task.FromResult(10);
    }

    static Task<int> GetB()
    {
        return Task.FromResult(20);
    }

    static async Task Main()
    {
        int[] arr = await Task.WhenAll(GetA(), GetB());
        Console.WriteLine(arr[0] + arr[1]);
    }
}

Kendini test et

  1. Task.WhenAll ne yapar?

    • Birden fazla Task'ın hepsinin bitmesini bekler
    • İlk biten Task'ı bekler
    • Task'ları iptal eder
    • Task'ları sırayla çalıştırır
    Cevabı göster

    Birden fazla Task'ın hepsinin bitmesini bekler — Doğru. WhenAll tüm Task'lar bitene dek bekler.

  2. WhenAll çağrısını tamamla

    await Task.____(t1, t2, t3);
    Cevabı göster
    await Task.WhenAll(t1, t2, t3);
  3. WhenAll'da bir task hata verirse ne olur?

    • WhenAll hiçbir şey yapmadan biter
    • WhenAll hata fırlatır; diğer task'lar yine de tamamlanır
    • WhenAll tüm task'ları iptal eder
    • Yalnızca hata veren task'ın sonucu gelir
    Cevabı göster

    WhenAll hata fırlatır; diğer task'lar yine de tamamlanır — Doğru. WhenAll hata fırlatır; ancak diğer task'lar tamamlanır.

İleri seviye bölümündeki tüm dersler