Task.WhenAll
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
-
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.
-
WhenAll çağrısını tamamla
await Task.____(t1, t2, t3);Cevabı göster
await Task.WhenAll(t1, t2, t3); -
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.