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);
}
Asenkron metodu Task.Result ile çağırmak ASP.NET SynchronizationContext ortamında Deadlock garantisidir.
İlgili Diğer Konular
Service Lifetimes: Transient, Scoped, Singleton
.NET IoC konteynerine bir nesneyi ne sıklıkla üretip ne zama...
Entity Framework Core: AsNoTracking & Eager Loading
Sadece okuma yapacağın sorgularda EF Core'un hafıza takip me...