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

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

Exception localEx = null;

Thread mythread = new Thread() { () =>
                   {
                        try
                        {
                            DoSomeStuff();
                        }
                        catch(Exception ex)
                        {
                            localEx = ex;
                        }
                    });

myThread.Start();
...
myThread.Join();

if(localEx != null)
   throw localEx;    // rethrow on the main thread
@H_404_2@我认为这是合法的,但我无法找到证明它的任何doco.我发现最接近的是在线程间转移异常:http://msdn.microsoft.com/en-us/library/ms229005.aspx

解决方法

是的,这是合法的.异常是(一般来说)没有线程亲和性的描述对象. @H_404_2@你最好在一个新的异常中包装你的线程异常:

throw new Exception("Something descriptive here",localEx);
@H_404_2@这样,localEx中的堆栈跟踪将被保留(作为新异常的InnerException).

猜你在找的C#相关文章