gpt4 book ai didi

c# - 可以安全地抛出在另一个线程 C# 上创建的异常

转载 作者:太空宇宙 更新时间:2023-11-03 11:20:07 24 4
gpt4 key购买 nike

我想在线程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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com