Bir ASP.Net uygulamasında, kullanıcı web sayfasındaki bir düğmeyi tıklatır ve bu, olay işleyicisi aracılığıyla sunucuda bir nesnenin örneğini oluşturur ve nesne üzerinde bir yöntem çağırır. Yöntem, bir şeyler yapmak için harici bir sisteme geçer ve bu biraz zaman alabilir. Yani, yapmak istediğim şey, bu yöntem çağrısını başka bir iş parçacığında çalıştırmak, böylece "İsteğiniz gönderildi" ile kullanıcıya kontrolü geri verebilirim. Bunu ateşle ve unut olarak yapmaktan oldukça mutluyum, ancak kullanıcının statü için nesneyi sorgulamaya devam etmesi daha da güzel olurdu.
Bilmediğim şey, IIS, kullanıcı oturumu sona erse bile iş parçacığımın çalışmaya devam etmesine izin verip vermediğidir. Düşünün, kullanıcı olayı tetikliyor ve biz de nesneyi sunucuda başlatıyoruz ve yöntemi yeni bir iş parçacığında çalıştırıyoruz. Kullanıcı, "İsteğiniz gönderildi" mesajından memnun kalır ve tarayıcısını kapatır. Sonunda, bu kullanıcı oturumu IIS'de zaman aşımına uğrayacaktır, ancak iş parçacığı hala çalışıyor ve çalışıyor olabilir. IIS iş parçacığının çalışmaya devam etmesine izin verecek mi yoksa kullanıcı oturumu sona erdiğinde onu öldürüp nesneyi atacak mı?
DÜZENLEME: Cevaplardan ve yorumlardan, bunu yapmanın en iyi yolunun uzun süren işlemleri IIS dışına taşımak olduğunu anlıyorum. Her şeyden ayrı olarak, bu uygulama alanı geri dönüşüm problemiyle ilgilenir. Uygulamada, sürüm 1'i sınırlı bir süre içinde sıfıra indirmem gerekiyor ve mevcut bir çerçeve içinde çalışmam gerekiyor, bu nedenle hizmet katmanından kaçınmak istiyorum, dolayısıyla IIS içindeki iş parçacığını ateşleme arzusu. Pratikte, burada "uzun çalışma" sadece birkaç dakika sürecek ve web sitesindeki eşzamanlılık düşük olacak, bu yüzden sorun olmayacaktır. Ancak, bir sonraki sürümün kesinlikle ayrı bir hizmet katmanına bölünmesi gerekecek.