Sobes.tech
Junior

Async ve await anahtar kelimeleri kullanılarak asenkron programlama nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

async ve await ile asenkron programlama, programmanın ana yürütme akışını engellemeden uzun sürebilecek işlemleri (örneğin, giriş/çıkış, ağ istekleri) gerçekleştirmeye olanak tanır. Bu, uygulamanın yanıt verme kabiliyetini artırır.

  • async: Bir yöntemi değiştirmek için kullanılır ve derleyiciye içinde await operatörlerinin kullanılacağını gösterir. async ile işaretlenmiş bir yöntem, Task, Task<T> veya void dönebilir (ancak void'dan kaçınılmalıdır, sadece olay işleyicileri için). Döndürülen Task veya Task<T>, henüz tamamlanmamış bir işlemi temsil eder.
  • await: Task veya Task<T> döndüren asenkron bir işlemi uygular. await operatörüne ulaşıldığında, yöntem "askıya alınır" ve mevcut iş parçacığı serbest bırakılır. Asenkron işlem arka planda (veya bir iş parçacığı havuzu veya işletim sisteminin giriş/çıkış mekanizması kullanılarak) yürütülür. İşlem tamamlandığında, yöntem aynı await'den sonra başka bir iş parçacığında veya kullanılabilir durumda olan aynı iş parçacığında devam eder.

Temel kullanım örneği:

// Task döndüren async yöntem
public async Task DoSomethingAsync()
{
    // Asenkron bir işlemi gerçekleştirip tamamlanmasını bekler
    await Task.Delay(1000); // Uzun süren bir işlemin taklidi
    Console.WriteLine("Asenkron işlem tamamlandı.");
}

// Task<int> döndüren async yöntem
public async Task<int> GetValueAsync()
{
    await Task.Delay(500);
    return 42;
}

// Main metodunda async ve await kullanımı (örnek olarak, gerçek uygulamalarda genellikle .NET Core 3.0+ ile async Main kullanılır)
public static async Task Main(string[] args)
{
    Console.WriteLine("Başlangıç...");
    
    // Asenkron metodları çağır
    await DoSomethingAsync();
    int result = await GetValueAsync();
    
    Console.WriteLine($"Sonuç: {result}");
    Console.WriteLine("Bitti.");
}

async/await'in manuel iş parçacığı veya geri çağrı yönetimine kıyasla en büyük avantajı, asenkron kodun yazımını ve okunmasını basitleştirmesidir. Neredeyse senkron kod gibi görünür, ancak iş parçacığını engellemez, bu da kullanıcı arayüzü veya yüksek yük altında çalışan sunucu uygulamaları için kritiktir.