2011-11-16 9 views
5

Delege'de BeginInvoke çağrıldığında, eylem ayrı bir iş parçacığında yürütülür. ASP.NET'te çağrılırsa bir CLR worker thread kullanıyor mu? Yoksa bir IIS çalışan iş parçacığı kullanıyor mu? İkincisi ise, eylemin bir CLR çalışan iş parçacığında yürütüldüğünden emin olmak için bir zaman uyumsuz ASP.NET deseni kullanması gerekecektir. Ama eğer eylem, BeginInvoke üzerine orada bitiyorsa bunu yapmamayı tercih ederim.Eşzamansız işlemlerin üstesinden gelmek için ASP.NET'teki delegeleri kullanma

cevap

6

CLR çalışan iş parçacığı kullanır.

here Öncelikle

açıklandığı gibi, ASP.NET CLR iş parçacığı havuzu daha arka planı için hizmet istekleri (için işlem çapında CLR iş parçacığı havuzu kullanan, bu konuda .NET sütununa bakın).

DÜZENLEME:

başka bir kaynak this blog

Maalesef BeginInvoke tarafından kullanılan iplik aslında Sayfa

İstekleri işlemek için ASP.Net tarafından kullanılan aynı çalışan iş parçacığı havuzundan alınır ise
+0

Teşekkürler. MVC bir asenkron modeli desteklemektedir. Bu, BeginInvoke tekniğiyle birlikte kaldıraç kullanırsam, sayfamın hızlıca geri döneceği ve işin bir IIS çalışan iş parçacığı almayacağı anlaşılıyor. Doğru? –

+0

Blog yayınını tekrar okurken sadece bir Thread.Start() tekniği yapabilirim. Uygulamam için, bu süreçlerin herhangi birinde (genellikle sadece 1) meydana gelen bir avuç dolusu riske girmeyeceğim, bu yüzden ihtiyaçlarım için bu noktada muhtemelen en kolay/en sürdürülebilir çözümdür. Arama boyunca takip eden herkes için "Güzel. Ben sadece Thread.Start() kullanacağım ve kendi parçamı oluşturacağım." –

+0

@John Yea Haklısınız. Yalnızca sayfayı hızlıca döndürmek istiyorsanız, kullanıcı sonuçları bilmeden, iyi. ama performansı artırmayacak. – Mithir

1

Özel bir temsilci kullanarak ve onun BeginInvoke yöntemini çağırmak, uygulamanız için çalışan iş parçacıklarını tetiklemenin hızlı bir yolunu sunar. Ancak ne yazık ki, ASP.NET tarafından HTTP isteklerini işlemek için kullanılan aynı havuzdan iş parçacığı kullandıkları için uygulamanızın genel performansına zarar veriyorlar.

Ayrıca, Eşzamansız yöntemden geri aranmanın önemli olmasının önemli olduğunu da unutmayın; ana iş parçacığının, eşzamansız işlem tamamlanana kadar istemciye dönmesini engellemeniz gerekir. Günlüğe kaydetme ve analitik bir 'yangın ve unut' yöntemi çağrısı ise, işler daha kolay olur ve yalnızca yöntemi kapatabilir ve sunucunun istemciye yanıt vermesine izin verebilirsiniz. Ancak, geri arama önemliyse ve sunucu işlemeyi tamamladıysa, tamamlandığında çağrı geri bildirimini işlemek için sunucuda hiçbir şey olmuyor; Bu, ASP.NET uygulamaları için sunucuda eşzamansız işlemenin bir WinForms uygulamasından farklı olduğu yerdir.

İlgili konular