Çözüldü: eşzamansız uyku

Son Güncelleme: 09/11/2023

Günümüzün eşzamansız programlama dünyasında, birçok zorlukla karşı karşıyayız; bunlardan biri gecikmeleri veya uykuyu eşzamansız bir şekilde ele almaktır. Senkronize programlamada Thread.Sleep() kullanarak kasıtlı bir gecikmeye neden olmak yaygın bir uygulamadır, ancak senkronize olmayan bir bağlamda Task.Delay() kullanırız. Öncelikle, async ve wait operatörlerinin ne olduğunu ve çözdükleri sorun alanını anlayıp konuya dalalım.

Eşzamansız ve bekleme operatörleri

C#'ta var zaman uyumsuz hem de beklemek geliştiricilerin eşzamanlı koda çok benzeyen eşzamansız kod yazmasına olanak tanıyan anahtar kelimeler. Eşzamansız programlama, G/Ç, ağ istekleri veya ağır hesaplamalar gibi uzun süren işlemlerin engellenmesi veya beklenmesiyle ilgili sorunları azaltır ve ardından sistem performansını artırır.

genel eşzamansız Görev AsyncMethod()
{
AnotherMethod()'u bekleyin;
}

Yukarıdaki yöntemde kod çalıştırıldığında ve wait anahtar sözcüğüne ulaştığında çağırana geri döner ve yalnızca beklenen görev (AnotherMethod()) tamamlandığında bir sonraki satıra geçer.

Senkronize Uyku ve Asenkron Gecikme

Thread.Sleep() ve Task.Delay() arasındaki farkı inceleyelim. Senkron kodda, bir yöntemin yürütülmesini geciktirmek veya duraklatmak istiyorsak, Thread.Sleep() işlevini kullanırız. Ancak, eşzamansız bir senaryoda, 'eşzamansız uyku' gibi davranan Task.Delay() işlevimiz vardır.

genel geçersiz SyncMethod()
{
Thread.Sleep(1000);
}

genel eşzamansız Görev AsyncMethod()
{
bekle Task.Delay(1000);
}

Senkron yöntemde, 'uyku' komutuna basıldığında iş parçacığı bloke edilir ve belirtilen süre boyunca uyku moduna alınır, bu da sistemin performansını olumsuz yönde etkileyebilir. Asenkron yöntemde 'gecikme' komutu yürütüldüğünde yöntem duraklatılır ancak iş parçacığı iş parçacığı havuzuna geri bırakılır, dolayısıyla herhangi bir tıkanma olmaz.

Eşzamansız Uyku Yöntemi Oluşturma

Asenkron uyku kavramını gösteren bir yöntem oluşturalım. Davranışla dalga geçmemiz gereken bazı yoğun hesaplamalı yöntemlerimiz olduğunu düşünün.

genel eşzamansız Görev ComputeIntensiveMethod()
{
for (int i = 0; i < 5; i++) { wait Task.Delay(2000); Console.WriteLine("Gecikmeden sonra çalıştırma"); } } [/code] Yukarıdaki yöntemde, Task.Delay, print ifadesinin her yürütülmesinden sonra 2 saniyelik eşzamansız bir gecikmeye neden olur, dolayısıyla eşzamansız bir uyku simülasyonu yapar. Asenkron programlama, duyarlı ve verimli uygulamalar oluşturmak için hayati öneme sahiptir. C#'ın async/await ve Task.Delay() gibi gelişmiş yetenekleriyle, zaman uyumsuz model programlamanın avantajlarından tam potansiyeline kadar yararlanabilirsiniz. Eşzamansız programlama dünyasında Task.Delay yönteminin Thread.Sleep ile karşılaştırıldığında çok daha verimli olduğunu unutmayın, çünkü bir gecikmeye neden olurken iş parçacığını engellemez. Bu hakları kullanmak uygulamanızın performansını önemli ölçüde artırabilir.

İlgili Mesajlar: