Async Void Metod Yazmanın Tehlikeleri ve Çözümleri

Async void metod yazmak, C# dilinde yapılan en yaygın hatalardan biri. Görünüşte basit ve çalışıyor gibi görünse de, arka planda ciddi sorunlara yol açar.

Async void'in ilk sorunu istisna yönetimi. Normal bir metod içinde fırlatılan istisna (exception) çağıran koda ulaşır ve orada yakalanabilir. Ama async void'de fırlatılan istisna, ThreadPool üzerinde çalışan bir görevde ortaya çıkar. Kimse onu yakalamaz ve uygulama aniden çöker.

1// YANLIŞ: Async void
2private async void FetchDataWrong()
3{
4var result = await httpClient.GetAsync("https://api.example.com/data");
5// Burada istisna fırlarsa, hiç kimse yakalamaz!
6}
7
8// DOĞRU: Async Task
9private async Task FetchDataCorrect()
10{
11var result = await httpClient.GetAsync("https://api.example.com/data");
12// İstisnalar çağıran koda ulaşır
13}

İkinci sorun, hata takibi ve hata ayıklama zorluğu. Async void metod çağırıldığında, çağıran kod hemen devam eder; görev arka planda sessizce başarısız olabilir. Kullanıcı hiçbir bildirim almaz, log kaydı olmaz.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Üçüncü sorun ise uygulamanın çökmesi. Async void'deki yakalanmayan istisna, tüm uygulamayı düşürebilir. Özellikle web uygulamalarında veya servis uygulamalarında bu felaket olur.

1// Doğru kullanım: Task döndür, çağrıda await et
2public async Task ProcessUserAsync(int userId)
3{
4try
5{
6var user = await GetUserAsync(userId);
7await SaveUserAsync(user);
8}
9catch (Exception ex)
10{
11logger.LogError(ex, "Kullanıcı işleme başarısız");
12throw; // Veya uygun şekilde işle
13}
14}
15
16// Çağrı
17await ProcessUserAsync(123);

Async void'in tek yasal kullanım yeri, olay işleyicileridir (event handler). Orada async void kabul edilir, çünkü çağıran kod yoktur.

1// Bu durum UYGUN: Event handler
2private async void Button_Click(object sender, EventArgs e)
3{
4await FetchAndDisplayDataAsync();
5}

Özet: Event handler dışında asla async void kullanma. Hep async Task döndür. Bu şekilde istisnalar kontrol altında kalır, hata takibi mümkün olur ve uygulama güvenli kalır.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz