Sen benim bulabilirsiniz yararlı konuda MSDN makalesine ; Bu makalede , ASP.NET'te ne zaman kullanılacağını değil, ASP.NET'te ne zaman kullanmanız gerektiğini açıklayan çok yer kapladım.async
async
ASP.NET MVC zaman uyumsuz eylemleri kullanarak bazı endişeleri var. Uygulamalarımın performansını artırdığında ve ne zaman değil.
İlk olarak, async
/ await
iş parçacıklarını serbest bırakmakla ilgilidir . GUI uygulamalarında, temel olarak GUI iş parçacığını serbest bırakmakla ilgilidir, böylece kullanıcı deneyimi daha iyi olur. Sunucu uygulamalarında (ASP.NET MVC dahil), esas olarak sunucunun ölçeklenebilmesi için istek dizisini boşaltmakla ilgilidir .
Özellikle :
- Bireysel isteklerinizi daha hızlı tamamlayın. Aslında, (sadece bir teensy bit) daha yavaş tamamlayacaklar.
- Bir tuşa bastığınızda arayana / tarayıcıya dönün
await
. await
tarayıcıya değil, yalnızca ASP.NET iş parçacığı havuzuna "verir".
İlk soru - ASP.NET MVC her yerde zaman uyumsuz eylem kullanmak iyi mi?
G / Ç yaptığınız her yerde kullanmanın iyi olduğunu söyleyebilirim. Bununla birlikte, mutlaka yararlı olmayabilir (aşağıya bakınız).
Ancak, CPU'ya bağlı yöntemler için kullanmak kötü . Bazen devs async
, sadece Task.Run
kontrolörlerini arayarak fayda sağlayabileceklerini düşünüyor ve bu korkunç bir fikir. Bu kod, başka bir iş parçacığı alarak istek iş parçacığını serbest bıraktığından, hiçbir faydası yoktur (ve aslında, ek iş parçacığı anahtarlarının cezasını çekiyorlar)!
Veritabanını sorgulamak istediğimde (EF / NHibernate / diğer ORM aracılığıyla) async / await anahtar sözcüklerini kullanmalı mıyım?
Mümkün olan her türlü yöntemi kullanabilirsiniz. Şu anda büyük oyuncuların çoğu destekliyor async
, ancak desteklemeyen birkaç kişi var. ORM'niz desteklemiyorsa async
, onu Task.Run
veya benzeri bir şeyi sarmaya çalışmayın (yukarıya bakın).
Not I "dediniz olabilir kullan". Tek bir veritabanı arka ucuna sahip ASP.NET MVC'den bahsediyorsanız, (neredeyse kesinlikle) herhangi bir ölçeklenebilirlik avantajından yararlanamayacaksınız async
. Bunun nedeni, IIS'nin tek bir SQL sunucusunun (veya diğer klasik RDBMS) örneğinden çok daha fazla eşzamanlı isteği işleyebilmesidir. Ancak, arka uç daha modern eğer, - SQL sunucu kümesi Azure SQL, NoSQL, vs - ve arka uç ölçeklenebilir ve sizin ölçeklenebilirlik darboğaz, IIS sonra size bir ölçeklenebilirlik parası alabilirsiniz async
.
Üçüncü soru - Veritabanını bir tek eylem yönteminde eşzamansız olarak sorgulamak için kaç kez anahtar kelime bekleyebilirim?
İstediğiniz kadar. Ancak, birçok ORM'nin bağlantı başına bir işlem kuralı olduğunu unutmayın. Özellikle, EF her DbContext için tek bir işleme izin verir; bu işlem eşzamanlı veya eşzamansız olsun, doğrudur.
Ayrıca, arka ucunuzun ölçeklenebilirliğini tekrar unutmayın. SQL Server'ın tek bir örneğini vuruyorsanız ve IIS'niz zaten SQLServer'ı tam kapasitede tutabiliyorsa, SQLServer üzerindeki baskıyı iki katına çıkarmak veya üç katına çıkarmak size hiç yardımcı olmaz.