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/

相关文章:

c# - 使用 ManualResetEvent 锁定测试对 NAudio 进行单元测试

c# - 是否有任何日语 TTS 语音可与 C# SpeechSynthesizer 一起使用

linux - 是否可以在 OS X 中设置 pthread CPU affinity?

java - 使用 java.net.UrlConnection 和输出流通过 Grails 1.3.7 下载大文件时出错

python - Shapely : "shapely.geos.TopologicalError: The operation ' GEOSIntersection_r' produced a null geometry"中的多边形相交错误

c# - 事件和方法之间的区别

c# - 如何为 "T must be a reference type"编写单元测试?

c++ - openmp:增加线程数会降低性能

python - Julia >=1.3 和 Python 3.x 中的多线程模型比较

java - 传递要捕获的异常类型