在 C# 中捕获一个线程上的异常,然后在另一个线程上重新抛出它是否合法且安全。
例如这合法吗
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
我认为这是合法的,但我找不到任何可以证明这一点的 doco。我找到的最接近的是在此处简要提及在线程之间传输异常:http://msdn.microsoft.com/en-us/library/ms229005.aspx
最佳答案
是的,这是合法的。异常是(一般来说)没有线程关联的描述性对象。
最好将线程异常包装在一个新的异常中:
throw new Exception("Something descriptive here", localEx);
这样,localEx 中的堆栈跟踪将被保留(作为新异常的 InnerException
)。
关于c# - 您可以在不同的线程上重新抛出 .NET 异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1303516/