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
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
Kullanım/yönetim, IIS6, IIS7 ve IIS 7.5'de biraz farklıdır.
Pretty detay ve burada güncellenen açıklama: Bu bir soru ama neyse okumak iyi cevap
ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0
emin olmaz.
Ö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.
- 1. Özel durumun üstesinden gelmek için google chrome script debugger'ını almanın bir yolu var mı?
- 2. NSURLSession delegeleri,
- 3. Eşzamansız programlamayı Ramda ile kullanma
- 4. AVAudioRecorderDelegate'in Delegeleri Aramıyor
- 5. Delegeleri dinamik olarak
- 6. C# delegeleri gizleniyor
- 7. CodeMirror'ın lint özelliği için eşzamansız bir uyarı kaynağı kullanma
- 8. iOS Swift delegeleri
- 9. Storyboard - delegeleri ayarlama
- 10. Starscream delegeleri çağrılmadı
- 11. Android'de çalışmak için üç nokta üstesinden gelemiyorum
- 12. kafka.consumer.ConsumerTimeoutException nasıl üstesinden gelebilirim?
- 13. * .orig dosyalarını görmezden gelmek için Emacs'i kullanın.
- 14. #pragma mark text alan delegeleri
- 15. Çalışan işlemlerin adlarını geri alma
- 16. make_shared constness nasıl üstesinden gelebilirim
- 17. UYARI: Windows Debugger'daki [bir şey] [bir şey] üstesinden ne gelir?
- 18. Hedefteki mesajları görmezden gelmek C
- 19. TCP soket bağlantısında eşzamansız ve eşzamansız Avantajı
- 20. Eşzamansız olarak eşzamansız yöntem çağrılmaya çalışırken kilitlenme
- 21. Eşzamansız foreach
- 22. Caliburn Micro Xamarin için İşlemlerin Veri Bağlama Düzeni
- 23. Verilen kişi için github depolarındaki tüm işlemlerin bir listesini alma
- 24. Eşzamansız bağlantı
- 25. Üstesinden gelme java.net.MalformedURLException: iletişim kuralı yok Exception
- 26. nodejs'in Sonsuza dek kullanılmasını sağlayan konsol.logs ekrana gelmek için
- 27. İki dal arasında gidip gelmek için doğru yol?
- 28. Windows'da Git, sembolik bağlantıları görmezden gelmek için nasıl kullanılır
- 29. Global olarak kaydedilen işlemlerin maksimum sayısı
- 30. Sabit boyutlu bir yığıntaki işlemlerin karmaşıklığı
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? –
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." –
@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