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çindeawaitoperatörlerinin kullanılacağını gösterir.asyncile işaretlenmiş bir yöntem,Task,Task<T>veyavoiddönebilir (ancakvoid'dan kaçınılmalıdır, sadece olay işleyicileri için). DöndürülenTaskveyaTask<T>, henüz tamamlanmamış bir işlemi temsil eder.await:TaskveyaTask<T>döndüren asenkron bir işlemi uygular.awaitoperatö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.