我想在线程A中捕获异常,然后将异常对象传递给线程B,并从线程B中抛出它。这样安全吗?
线程A
try {
// Code that throws exceptions
} catch (Exception e) {
sendToOtherThread(e);
}
线程B
Exception e = receiveException();
throw e;
编辑
为了清楚起见:我了解线程的工作原理,以及如何将对象引用从一个线程传递到另一个线程。问题更多的是从一个未创建异常对象的线程中抛出异常对象是否安全,或者类 Exception
本身或 .NET 处理它的方式是否存在任何问题。
最佳答案
您可以重新抛出从另一个线程接收到的异常(例如,在BackgroundWorker的RunWorkerCompleted事件处理程序中),但更常见的做法是将其包装在另一个异常中,以保留堆栈跟踪:
private void backgroundWorker1_RunWorkerCompleted(
object sender, RunWorkerCompletedEventArgs e)
{
// First, handle the case where an exception was thrown.
if (e.Error != null)
{
throw new SomeException("... message ...", e.Error);
}
...
}
关于c# - 安全地抛出在另一个线程上创建的异常 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11326544/