c# – 你可以在另一个线程上重新抛出.NET异常吗?

前端之家收集整理的这篇文章主要介绍了c# – 你可以在另一个线程上重新抛出.NET异常吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在C#中捕获异常的一个线程是合法和安全的,然后重新抛出另一个线程.

例如.这是合法的吗

  1. Exception localEx = null;
  2.  
  3. Thread mythread = new Thread() { () =>
  4. {
  5. try
  6. {
  7. DoSomeStuff();
  8. }
  9. catch(Exception ex)
  10. {
  11. localEx = ex;
  12. }
  13. });
  14.  
  15. myThread.Start();
  16. ...
  17. myThread.Join();
  18.  
  19. if(localEx != null)
  20. throw localEx; // rethrow on the main thread

我认为这是合法的,但我无法找到证明它的任何doco.我发现最接近的是在线程间转移异常:http://msdn.microsoft.com/en-us/library/ms229005.aspx

解决方法

是的,这是合法的.异常是(一般来说)没有线程亲和性的描述对象.

你最好在一个新的异常中包装你的线程异常:

  1. throw new Exception("Something descriptive here",localEx);

这样,localEx中的堆栈跟踪将被保留(作为新异常的InnerException).

猜你在找的C#相关文章