WaitAll... WhenAll... Hangisi Ne Zaman??! - Enterprisecoding
Görüldüğü gibi temelde her iki fonksiyon da aynı amaçla kullanılmakta; fakat aralarındaki en önemli fark içinde bulundukları iş parçacığının kilitlenmesi/bekletilmesidir. WaitAll, devam kodunun işletilmesini önlemek adına işlemler bitene kadar fonksiyondan çıkmayarak aynı zamanda içinde bulunduğu iş parçacığını da kilitleyecektir. Eğer içerisinde bulunan kod ara yüz iş parçacığı dışındaki herhangi bir iş parçacığı ise bu durum bir genelde bir problem oluşturmayacak; fakat ara yüz iş parçacığında bulunması durumunda tüm işler bitene kadar ara yüz kullanıcılara yanıt veremeyecek ve bu durum da uygulamada donma olarak yorumlanacaktır. Bu, doğal olarak, hiç bir son kullanıcı tarafından istenen bir durum değildir ve size olumsuz bir geri dönüşü olacaktır. Öte yandan WhenAll, işleyişin devamını bekletmek için farklı bir yol takip etmektedir, bunun için asenkron programlamanın nimetlerinden faydalanacaktır. WhenAll fonksiyonu çağrıldığında yeni bir iş daha oluşturularak belirtilen işlerin bitimi burada beklenecektir. Derleme zamanında ise bu kod yorumlanarak kodun devamının WhenAll işinin bitiminde asenkron olarak çalıştırılabilmesi için gerekli değişiklikler yapılacaktır. Ortaya çıkan kod ise tamamen asenkron olarak işleyeceğinden ara yüz iş parçacığında bile çalıştırılsa ara yüzün yanıt verir durumda kalmasını sağlayarak donma olmasının önüne geçecek ve son kullanıcıdan olumsuz geri dönüşleri engelleyecektir.
Yukarıda paylaşmış olduğum bu fark kesinlikle WhenAll’u her zaman WaitAll yerine kullanılması gerektiği anlamına gelmemektedir. İş mantığınıza göre her ikisinin de kullanılabileceği senaryolar mutlaka olacaktır. Aralarındaki farkı tam olarak biliyor olmak, doğru fonksiyonu doğru yerde kullanma şansı verecektir.
Categories: C#, TürkçeBy Fatih Boy Temmuz 9, 2011 Leave a comment
PreviousPrevious post:Asenkron Programlamada Hata YönetimiNextNext post:Windows için Kinect SDK