Ana Sayfa Hakkımda Dersler Blog Mikrofonda İletişim Projeler
Dersler TEMEL · C#

C# Temelleri — Async / Await

10 dk okuma · Emre Ulutabak
1
Asenkron nedir?

Bir kafe düşün. Garson kahve siparişini alır, makineye verir ve beklemek yerine diğer masaya gider. Kahve hazır olunca geri döner.

Bu asenkron çalışmadır. Bir işin bitmesini beklerken başka iş yapılır. Programın donmaması, kullanıcıya yanıt vermeye devam etmesi için şarttır.

2
Neden önemli?

Veritabanından veri çekiyorsun. Bu işlem 200ms sürebilir. Senkron yazarsan program bu 200ms boyunca donar — kullanıcı hiçbir şey yapamaz.

Asenkron yazarsan program çalışmaya devam eder, veri gelince işlem tamamlanır.

3
async / await kullanımı
csharp
// Senkron — program bekler
public string VeriGetir()
{
    Thread.Sleep(2000); // 2 saniye bekle (program donar)
    return "Veri geldi";
}

// Asenkron — program beklemez
public async Task<string> VeriGetirAsync()
{
    await Task.Delay(2000); // 2 saniye bekle (program çalışmaya devam eder)
    return "Veri geldi";
}

// Kullanım:
public async Task Calistir()
{
    var veri = await VeriGetirAsync();
    Console.WriteLine(veri);
}
💡
async bir metot tanımlarken kullanılır. await ise içinde bekleme yapılan yere konulur.
4
Task nedir?

Task asenkron bir işlemin kendisini temsil eder. Sonuç döndüren metotlar Task<T>, döndürmeyenler Task kullanır.

csharp
// Sonuç döndüren async metot
public async Task<int> ToplamHesaplaAsync(int a, int b)
{
    await Task.Delay(100);
    return a + b;
}

// Sonuç döndürmeyen async metot
public async Task KaydetAsync(string veri)
{
    await Task.Delay(100);
    Console.WriteLine($"{veri} kaydedildi.");
}
5
Altın kurallar
💡
async metot yazdıysan içinde mutlaka await kullan. Yoksa senkron gibi çalışır.
💡
ASP.NET Core'da controller action'ları ve servis metotları async yazılır — bunu artık her yerde göreceksin.
💡
.Result veya .Wait() kullanma — deadlock yaratır. Her zaman await kullan.
MİNİ QUIZ
Async/Await hakkında hangisi doğrudur?
async metotlar her zaman Task<string> döndürür
await kullanmak programı tamamen durdurur
async/await sayesinde program bir işi beklerken başka işlere devam edebilir
.Result kullanmak await'in yerine geçer ve daha güvenlidir