CodeBlanks Logo Icon CodeBlanks

Task.Exception

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

Task.Exception ile task hatasını incelemeyi öğrenirsin.

Task.Exception özelliği

Task.Exception özelliği, bir Task hata verince hatayı AggregateException olarak tutar. Task henüz hata vermediyse null döner. Böylece bir Task'ı await etmeden hatasını inceleyebilirsin.

Bu özellik özellikle fire-and-forget senaryolarda ya da birden çok Task'ı toplu izlerken yararlıdır. Örnek: if (task.Exception != null) { Log(task.Exception); }. Task tamamlanmadan önce bu özellik her zaman null döner.

IsFaulted ve Exception

Task.IsFaulted, bir Task'ın hata verip vermediğini bool olarak verir. Task.IsCompleted ise task bitmiş mi (hata dahil) bilgisi verir. Task.IsCanceled iptal edildi mi diyebilir.

Bu üç bayrak Task'ın durumunu hızlıca öğrenmeni sağlar. Hata detayı gerekiyorsa Exception özelliğine bakarsın. Fire-and-forget senaryolarda bu bayrakları izleyerek loglama yapabilirsin.

Uygulama Task.Exception'ı incele

static async Task FailAsync() metodunu tanımla. Gövdede await Task.CompletedTask; ve throw new InvalidOperationException("Boom"); yaz. Main'i static async Task Main yap. Task t = FailAsync(); ile çağır (await etme). try { await t; } catch (Exception) { Console.WriteLine(t.IsFaulted); } ile IsFaulted değerini yazdır.

Örnek çözümü göster
FailAsync gövdesinde await Task.CompletedTask; ve throw new InvalidOperationException("Boom"); yaz. Main'i static async Task Main() yapıp Task t = FailAsync(); try { await t; } catch (Exception) { Console.WriteLine(t.IsFaulted); }
Örnek çözüm:
using System;
using System.Threading.Tasks;

class Program
{
    static async Task FailAsync()
    {
        await Task.CompletedTask;
        throw new InvalidOperationException("Boom");
    }

    static async Task Main()
    {
        Task t = FailAsync();
        try
        {
            await t;
        }
        catch (Exception)
        {
            Console.WriteLine(t.IsFaulted);
        }
    }
}

Kendini test et

  1. Task.Exception ne döndürür?

    • AggregateException ya da null
    • Doğrudan Exception
    • Task durumu
    • Bool (hata var mı)
    Cevabı göster

    AggregateException ya da null — Doğru. Task.Exception hata varsa AggregateException, yoksa null döner.

  2. Task.Exception kontrolü

    if (task.____ != null) { Console.WriteLine("Hata var"); }
    Cevabı göster
    if (task.Exception != null) { Console.WriteLine("Hata var"); }
  3. IsFaulted ne zaman true olur?

    • Task henüz çalışıyorken
    • Task hata verdiğinde
    • Task başarıyla bittiğinde
    • Task iptal edildiğinde
    Cevabı göster

    Task hata verdiğinde — Doğru. IsFaulted yalnızca task hata verdiğinde true olur.

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