CodeBlanks Logo Icon CodeBlanks

Task.WhenAny

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

Task.WhenAny ile ilk biteni beklemeyi öğrenirsin.

Task.WhenAny

Task.WhenAny birden fazla Task'ın ilki bitene dek bekler. Dönen Task, tamamlanan ilk Task'ı içerir. Örnek: Task<int> first = await Task.WhenAny(t1, t2);. Burada first tamamlanan ilk Task'tır; await first ile sonucunu alabilirsin.

Yarış senaryolarında kullanışlıdır: iki kaynaktan gelen yanıtlardan hızlı olanı seçmek gibi. Kaybeden Task'lar arka planda çalışmaya devam eder; iptal etmek senin sorumluluğundur.

WhenAny kullanımı

WhenAny sonucu bir Task döndürür; doğrudan değer değil. Örneğin await Task.WhenAny(t1, t2) bir Task döndürür (hangi task'ın bittiğini gösterir). Değeri almak için o task'ı da await etmen gerekir: int val = await first;.

Daha temiz yazım: önce var first = await Task.WhenAny(t1, t2);, sonra int val = await first;. Bu, özellikle iptal edilebilir işlerde okunaklıdır.

Uygulama WhenAny ile ilk biteni al

İki metot tanımla: static Task<int> Source1() ve static Task<int> Source2(). Her ikisi de return Task.FromResult(15); döndürsün. Main'i static async Task Main yap. Task<int> first = await Task.WhenAny(Source1(), Source2()); ile ilk biteni al, int val = await first; ile değeri al ve Console.WriteLine(val); ile yazdır.

Örnek çözümü göster
return Task.FromResult(15);. Main'i static async Task Main() yapıp Task<int> first = await Task.WhenAny(Source1(), Source2()); int val = await first; Console.WriteLine(val);
Örnek çözüm:
using System;
using System.Threading.Tasks;

class Program
{
    static Task<int> Source1()
    {
        return Task.FromResult(15);
    }

    static Task<int> Source2()
    {
        return Task.FromResult(15);
    }

    static async Task Main()
    {
        Task<int> first = await Task.WhenAny(Source1(), Source2());
        int val = await first;
        Console.WriteLine(val);
    }
}

Kendini test et

  1. WhenAll ve WhenAny farkını eşleştir

    WhenAll
    Tüm Task'ları bekler
    WhenAny
    İlk biten Task'ı bekler
    Task.FromResult
    Hazır sonuçlu Task üretir
    Task.Run
    İşi havuza gönderir
  2. WhenAny ne döndürür?

    • Doğrudan değeri döndürür
    • Void döndürür
    • Tamamlanan ilk Task'ı döndürür
    • Tüm Task'ların sonuçlarını dizi olarak döndürür
    Cevabı göster

    Tamamlanan ilk Task'ı döndürür — Doğru. WhenAny tamamlanan ilk Task'ı döndürür.

  3. WhenAny çağrısını tamamla

    Task<int> first = await Task.____(t1, t2);
    Cevabı göster
    Task<int> first = await Task.WhenAny(t1, t2);

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