c# - 您可以在不同的线程上重新抛出 .NET 异常吗?

标签 c# multithreading exception

在 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/

相关文章:

exception - 如何不在 Logback 中记录特定类型的异常?

c# - 将 dll 文件复制到 ClickOnce 部署中的 .exe 目录

c# - EF 存储库模式多对多插入

c# - 按条件动态匹配两个集合

java - Android:如何从 MainActivity 停止 IntentService 中的 Thread.sleep

exception - 更改 Lazarus 中的异常消息

c# - 如何关闭遮挡其他元素的永久元素?

python - 记录数据并同时检查条件的最有效方法?

c++ - 使用 Qt 同时运行线程

c++ - 定义自己的异常类的最佳实践?