Nasıl bir Exception
bir çok iş parçacığı Başvurusu bir Thread
meydana geldiğini öğrenmek olabilir? ve kaynakların ard arda temizliği? Aksi halde, iş parçacığı hala bellekte kalıyor ve çalışıyor olabilir.yakalamak İstisnalar
cevap
, yapamayacağınız: Bir iş parçacığı için "iş" fonksiyonu DoWork çağrılırsa sonra böyle bir şey yapmak iş parçacığı başlatılıyor. Örneğin: Yerine
public void Run()
{
try
{
Thread thread1 = new Thread(ThreadEntry1);
thread1.Start();
Thread thread2 = new Thread(ThreadEntry2);
thread2.Start();
}
catch (NotImplementedException)
{
// Neither are caught here
Console.WriteLine("Caught you");
}
}
private void ThreadEntry1()
{
throw new NotImplementedException("Oops");
}
private void ThreadEntry2()
{
throw new NotImplementedException("Oops2");
}
, bu yaklaşım daha kendine yeten ve açıkçası de çalışır: Konu başarısız olmadığını bilmek istiyorum, o zaman WaitHandles dizisi düşünmelisiniz
public void Run()
{
Thread thread1 = new Thread(ThreadEntry1);
thread1.Start();
}
private void ThreadEntry1()
{
try
{
throw new NotImplementedException("Oops");
}
catch (NotImplementedException)
{
Console.WriteLine("Ha! Caught you");
}
}
ve çağrı yönteminize geri dönün.
Interlocked.Increment(ref _mycounter);
Y. bir çağrı yığını var ve
iyi bir şekilde sizin iplik sarın varsa, ekleyebilir ... parçacığı içine yakalamak ve sanırım günlüğüne iş parçacığı kimliği ekleyebilir Gerekirse ipliğin sona ermesi için yakalama bölümüne kodlama kodu.
Bu tür bir şeyden endişe ediyorsanız, iş parçacığı giriş noktasını bir try/catch bloğuna sarmanız ve temizlemeyi açıkça yapmanız gerekir. Konu giriş noktasından geçen herhangi bir istisna uygulamanızın kapanmasına neden olur.
ThreadAbortException'ı .Net 3.5 veya altında varsayılan ayarlarla yakalayamazsınız ve varsayılan ayarlarla birlikte .Net 4.0'da bozuk durumu temsil edebilecek istisnaları yakalayamazsınız. Bu nedenle, varsayılan ayarları kullanarak bir try catch bloğu ile tüm istisnaları yakalayamazsınız (bunu yapmanız önerilmez) –
İpliği iptal etmedikçe ThreadAbortException atarsınız - aynı zamanda onları yakalayabilirsiniz, ancak onları yutmayın –
@ Chris S otomatik olarak yeniden yükseltildikçe, haklısın +1, yutkunma anlamını yakalamak için kullandım, bu politik olarak doğru değil. –
Normal işlevlerde yaptığınız gibi özel durumlar içinde istisnaları yakalayabilirsiniz. Sean belirttiği gibi, sen iplik yöntemiyle içindeki tüm özel durum işleme ve temizlik yapmak zorunda
private void DoWork(...args...)
{
try
{
// Do my thread work here
}
catch (Exception ex)
{
}
}
Eric Lippert'ın çalışan iş parçacığı meydana gelen istisnalar kötülüğü ilgili yakın post sahiptir: Alternatif ve daha basit bir yaklaşım sadece sayacını bir iş parçacığının operasyonu bitirir her zaman artırmak etmektir. Bir istisnanın "istisnai" olduğunu ve bir iş parçacığında bir istisnadan sonra emin olabileceğiniz tek şeyin, uygulamanızın durumundan artık emin olamayacağınız olduğunu okumak ve anlamaya değer.
- 1. yakalamak türetilen istisnalar tipleri Clang/MacOS X
- 2. C++ -The doğru atmak yolu ve yakalamak istisnalar
- 3. yakalamak
- 4. Haskell "istisnalar"
- 5. İç içe istisnalar mı?
- 6. Javascript'deki istisnalar nasıl yakalanır?
- 7. İstisnalar - Hemen atın ve yakalayın
- 8. Yakut İstisnalar - Neden "else"?
- 9. Farklı istisnalar için aynı ExceptionMapper
- 10. yakalamak hatalar
- 11. Objective-C/iPhone NSException benim app istisnalar yakalamak için aşağıdaki kodu kullanıyorum
- 12. Delege İstisnalar
- 13. IoC kabında çalışma zamanı istisnalarını yakalamak
- 14. işleme tüm istisnalar
- 15. Tüm javascript işlenmemiş özel durumları yakalamak
- 16. Hudson - Kölelerdeki günlükleri yakalamak
- 17. http hatalarını yakalamak
- 18. R: 'nls' hatalarını yakalamak
- 19. "Bırakılıyor" bit değerini yakalamak
- 20. Monad transformatörlerinde istisnaları yakalamak
- 21. Süper/bu kurucuda atılan istisnalar, diğer istisnalar için çağrılıyor
- 22. İşleyemediğiniz bir istisna yakalamak mümkün mü (C#)?
- 23. GCC programında istisnalar yakalanmaz
- 24. PHPUnit Kod Kapsamı & İstisnalar
- 25. CoInitialize() C istisnalar ++
- 26. Akka Vadeli İstisnalar
- 27. Belirli sorunlar için istisnalar
- 28. kaçınmak MissingBackpressureException istisnalar
- 29. Clojure Özel İstisnalar?
- 30. yöntem zincirleme ve istisnalar
Kabul. Bunu bir sorun olarak görmüyorum - bir iş parçacığı başlatıyorsunuz, sizin bir yönteminize giriyorsunuz. – TomTom