Task.Exception
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
-
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.
-
Task.Exception kontrolü
if (task.____ != null) { Console.WriteLine("Hata var"); }Cevabı göster
if (task.Exception != null) { Console.WriteLine("Hata var"); } -
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.