Yukarıdaki async ve sync olan kodlar Hemen hemen aynı görünüyorlar, Hatta async olan daha complex görünsede yinede async olanı tercih etmeliyiz. Fakat tercih sebebimiz performans değildir.
Tercih sebebimiz async olanın daha iyi ölçeklenebilir olmasıdır. İlk olarak sync olan versiyonu inceleyelim. repository.GetById(...)'ye tetiklediğimizde , geçerli thread durur ve task bitene kadar beklemek zorundadır. Büyük olasılıkla asıl işi yapan bir DocumentDb veya SQL Server'ınız var. Ve bunlar local de değil, farklı bir makinedeler, yani sunucunuz cevap dönene kadar thread tam anlamıyla boşta kalıyor ve bekliyor.
Şimdi async versiyonuna bir göz atalım: Burada da repositoryinin işini bitirmesini beklememiz gerekiyor ama önemli bir fark var. Await keywordu, current worker threadin programdan "ayırılmasına(detach)" ve thread poola geri dönmesine olanak tanır. GetByIdAsync tamamlandığında , .NET pooldan başka bir thread alır ve çalışmaya devam eder. Threadin async işler tamamlana kadar thread poola gitmesi ve başka işler yapması programımızın ölçeklenebilirliğini arttırmaktadır.
Servera her request attığımızda, yeni bir worker threadin öğelerinizi işleyeceğini görürsünüz. Thread async işlemi beklemek yerine thread poola geri döndüğünde , bu threadi başka bir requesti işlemek için kullanabiliriz.
ASP.NET Core'da async programlama, web uygulamanızı ölçeklendirmenin süper verimli bir yoludur. Sunucunuzu tam olarak kullanabilirsiniz ve sistem kaynakları boşta durmak zorunda kalmaz
Hiç yorum yok:
Yorum Gönder