2010-08-25 17 views
6

Windows Server 2008, IIS 7.5 üzerinde çalışan bir ASP.NET uygulamasında çalışan bir iş parçacığı oluşturuyorum. Bu iş parçacığı iş parçacığının yaptığı ilk şey, N saniye için uykudır ve sonra gerçek işini yapar. Uyku sırasında bir ThreadAbortException yakalamak.Bir worker (işçi) iş parçacığı neden bir Sleep sırasında bir ThreadAbortException deneyimi yaşar?

Bu davranışı açıklayabilir ve davranış puanlarınızı, davranışı ayarlamak için kullanılabilecek herhangi bir IIS/ASP.NET ayarına yönlendirirsiniz.

DÜZENLEME: Daha fazla bilgi. ThreadAbortException yakalama önerisi, sorun etrafında çalışmama yardımcı oldu, teşekkürler. Bu soruyu, öğrendiklerime dayanarak yazdım, ama yine de aynı soru, NEDEN, bu iş parçacığı, uyku sırasında iptal edildi mi?

+0

İki ardışık 17 saniye veya daha kısa süreler için uyursanız ne olur? –

+2

neden tüm iş parçacığı işleyicisini denemeyi denemiyor ve ne olduğunu görüyor musunuz? Büyük olasılıkla, işinize yarayacak bir şey olan ThreadAbortException'ı alırsınız. –

+0

@Robert - sorun yok @ liho1eye - –

cevap

6

ThreadAbortException çalışanınızın iş parçacığında gerçekleşir, çünkü başka biri Thread.Abort üzerinde denir, bu nedenle muhtemelen iş parçacığınızın yaptığı bir şey değil, bir dış neden olabilir. Denetlemeniz gereken ilk yer, herhangi bir iş parçacığı yönetimi için kendi kodunuz veya yapabileceğiniz bir işlemdir. Aksi halde, IIS için bu bir çalışan işlem (w3wp.exe) veya uygulama havuzu veya AppDomain geri dönüştürülmüş olabilir.

Geri dönüşüm, uygulama havuzu için boşta kalma zaman aşımı ayarı, düzenli olarak programlanmış bir geri dönüştürme veya bir bellek/CPU kullanımı tetikleyicisi nedeniyle olabilir. Bunlar, Server Explorer'daki IIS Configuration Manager (Win 2K8'de) veya inetmgr.exe aracını çalıştırarak yapılandırılabilir. Tess'in bloga here göre, AppDomain geri dönüşüm için başka nedenler de vardır:

  • Machine.config, Web.config veya Global.asax
  • bin dizini değiştirilmiş veya içeriği değiştirilmiş yeniden derleme (aspx, .Ascx veya asax) arasında
  • sayısı
  • pH ( 15 olarak ayarlanır, bu varsayılan) machine.config ayar veya web.config'de ile belirtilen sınır aşıyor sanal dizinin ysical yolu değiştirilir
  • CAS ilkesi değiştirilir
  • web hizmeti yeniden başlatıldığında
  • (2.0 yalnızca) Uygulama Alt Dizinler blog yazısı da var, diyeceksin

silinir Geri dönüşümün neden gerçekleştiğini takip etme hakkında bilgi. Yeni başlayanlar için ayrıntılı bir bilgi olup olmadığını görmek için Etkinlik Günlüğüne (eventvwr.msc) bakmayı deneyin.

Ayrıca, çalışan işlemini doğrudan hata ayıklamayı da deneyebilirsiniz. VS hata ayıklayıcısını kodunuzun çalıştığı w3wp.exe örneğine iliştirin, Thread.Abort'da bir kesme noktası ekleyin (hata ayıklayıcı seçeneklerinde ".NET Framework kaynak adımını etkinleştirmeniz gerekebilir) ve Abort'un nereden kaynaklandığını görün. çağrı yığını penceresi. Bu size neden olduğunu söyleyemez, ama en azından kimin yaptığını bileceksiniz.

+0

yapacaktır Sorun doğrudan bir barındırma sağlayıcısının makinesinde gerçekleştiği için değil, denetlediğim makinelerde olduğu için iş parçacığı hatalarını ayıklayamıyorum.Mantığım iş parçacığını iptal etmiyor. Varsayılan boşta kalma zaman aşımı dakika cinsindeyken, iş parçacığım 20 ya da 20 saniye kaldığında bu sorun yaşanıyor. Geri dönüşüm için diğer nedenlerin hiçbiri geçerli değildir. Response.Redirect veya Response.End dahil değildir. Yani ... hala bir gizem. –

+0

Sorunumu çözdüm: iş parçacıklarım ortada durduruldu ve bu, günlüklerimi "bin" klasörüne yazdığım için oldu (IIS'e neden oluyordu) ... – Illidan

İlgili konular