.NET Core (C#) Orta Seviye Asenkron

Async / Await & Thread vs Task

Uzun süren veritabanı veya HTTP isteklerinde işlemci çekirdeğini (thread) kilitlemeden serbest bırakmaktır.

5 Yaşındaki Çocuğa Anlatır Gibi (Analoji)

Restoranda garsonun yemeğin fırında pişmesini beklerken fırının önünde dikilmeyip diğer masaların siparişini almasıdır. Fırından zil sesi gelince gidip yemeği masaya götürür.

Teknik ve Profesyonel Tanımı

I/O operasyonlarında thread-blocking yapmadan CPU kaynaklarını serbest bırakan modeldir. Arka planda derleyici bir State Machine (Durum Makinesi) üretir. Task bir iş emrini, Thread ise o işi koşturan fiziksel OS kaynağını temsil eder.

Mülakatta Ne Demelisin? (Kurtarıcı Altın Cevap)

"Async/Await yeni bir thread açmak demek değildir; I/O bekleme süresinde thread'i serbest bırakarak ThreadPool'un tükenmesini (thread starvation) önlemektir. Asenkron metotların sonucunu .Result veya .Wait() ile senkrona çevirmek kilitlenmeye (Deadlock) sebep olur."

.NET Core (C#) Kod Örneği
public async Task<UserDto> GetUserAsync(int id)
{
    using var client = new HttpClient();
    var json = await client.GetStringAsync("https://api.site.com/user/" + id);
    return JsonSerializer.Deserialize<UserDto>(json);
}
Mülakat Tuzağı & En Çok Yapılan Hata:

Asenkron metodu Task.Result ile çağırmak ASP.NET SynchronizationContext ortamında Deadlock garantisidir.

İlgili Diğer Konular
Mimari & DI
Service Lifetimes: Transient, Scoped, Singleton

.NET IoC konteynerine bir nesneyi ne sıklıkla üretip ne zama...

Veritabanı & ORM
Entity Framework Core: AsNoTracking & Eager Loading

Sadece okuma yapacağın sorgularda EF Core'un hafıza takip me...