【发布时间】:2012-07-04 19:23:02
【问题描述】:
我想在线程 A 中捕获异常,然后将异常对象传递给线程 B,然后从线程 B 中抛出。这样安全吗?
线程A
try {
// Code that throws exceptions
} catch (Exception e) {
sendToOtherThread(e);
}
线程 B
Exception e = receiveException();
throw e;
编辑
为了清楚起见:我了解线程的工作原理,以及我应该如何将对象引用从一个线程传递到另一个线程。问题更多的是从一个没有创建异常对象的线程抛出异常对象是否安全,或者Exception 类本身或.NET 处理它的方式是否存在任何问题。
【问题讨论】:
-
是的,但是(可能)非常没用,因为你不能重新抛出,所以你会覆盖原始的堆栈跟踪。如果这不是您想要的,则必须包装异常并抛出新异常。
-
我很好奇你们对
sendToOtherThread和receiveException的实现。 -
假设这两个方法按原样传递对象引用。所以两个线程中的 e 都指向同一个对象。
标签: c# multithreading exception thread-safety