C#, JavaScript ve Python’da sleep/bekleme fonksiyonları
Kodda gecikme oluşturmak için C#, JavaScript ve Python’da kullanılabilecek sleep, delay ve async bekleme örnekleri.
Kodun bir süre beklemesi gereken durumlar vardır: bir servise arka arkaya istek göndermemek, yeniden deneme aralığı bırakmak, bir işlemin tamamlanmasını beklemek gibi. Üç dilde bunun karşılığı aşağıda.
Aradaki fark yalnız yazım değil, davranış: C# tarafındaki bekleme bulunduğu iş parçacığını durdurur; o sırada o thread başka iş yapamaz. JavaScript'teki karşılığı ise sözle (Promise) çalışır, tarayıcıyı kilitlemez, bekleme sırasında sayfa yanıt vermeye devam eder. Python'daki bekleme yine bulunduğu akışı durdurur.
Dikkat edilecekler
- Birim farkı: C# ve JavaScript milisaniye, Python saniye alır. Aynı sayıyı üçüne de vermek bin kat hataya yol açar.
- Arayüzü olan uygulamalarda ana iş parçacığını durduran bekleme kullanmayın; uygulama donmuş görünür.
- Yeniden deneme için sabit bekleme yerine her denemede artan bir süre (üstel geri çekilme) genellikle daha doğrudur.
Thread.Sleep(x); // Buradaki x değeri milisaniye türündedir.const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
await sleep(x); // Buradaki x değeri milisaniye türündedir. import time
time.sleep(x) // Buradaki x değeri saniye türündedir.
Kısa rehber
Ne zaman kullanılır?
Sleep fonksiyonları; yeniden deneme aralığı, demo akışı, zaman kontrollü işlem veya kısa bekleme gereken durumlarda işe yarar. Fakat özellikle kullanıcı arayüzü olan uygulamalarda beklemenin uygulamayı kilitlememesi gerekir.
Dikkat edilecekler
- Milisaniye ve saniye farkını karıştırmayın.
- Arayüz thread'ini durduran beklemelerden kaçının.
- API yeniden denemelerinde sabit süre yerine artan bekleme stratejisi kullanmayı değerlendirin.
Sık yapılan hata
Beklemeyi çözüm gibi kullanıp asıl senkronizasyon problemini gizlemek sık görülür. Bir işlemin bittiğini beklemek yerine mümkünse olay, callback veya promise akışıyla takip edin.
Bu örnek nerede işe yarar?
Bu tür küçük yardımcı kodlar web yazılımı, mobil uygulama arka uçları, yönetim panelleri ve API projelerinde zaman kazandırır. Önemli olan örneği olduğu gibi kopyalamak değil, veri formatı, güvenlik ve performans beklentisine göre projeye uyarlamaktır.