Asp.net Request Timout çözümü için “Fire and Forget” olarak Arkaplan Görevi (background task) çalıştırma

asp.net Sendgrid ile tek tek tüm üyeler mail gönderen bir kodum var. 6 dk sürüyor. Bazen asp.net Request Timeout HATASI alıyoruz. Async ile bunu yapabiliriz lakin işlem eğer asp.net default süresinden uzun sürerse yine yarıda kesilebiliyor. Normalde Task Yönetimi için Hangfire ve QuartZ son derece popüler ve güzel çözümler. Lakin built-in framework içi bir çözüm olması ve ihtiyacımın sadece bir kaç yerde olması sebebi ile QueueBackgroundWorkItem tercih ettim. Yanlız burada dikkat etmemiz gereken tek şey uygulamamızın .net 4.5.2 ve üzeri olması gerekiyor.
Hanselman üstad blogunda çözümleri derlemiş.
http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx

Ben sürekli bir ihtiyaç olmadığı için HostingEnvironment.QueueBackgroundWorkItem  kullanmayı tercih ettim.

HostingEnvironment.QueueBackgroundWorkItem(clt =>
{
//Background task that needs to be performed safely
Uyeleregonder();
});

QueueBackgroudWorkItem Task.Run dan farklı olarak requestden bağımsız olarak çalışıyor ve AppDomain bitmesini bekliyor. lakin hata olursa UI Göstermiyor. Onu Ayrıca halletmelisiniz.

Bir cevap yazın