【发布时间】:2010-12-12 21:01:26
【问题描述】:
相关:How to catch exceptions from a ThreadPool.QueueUserWorkItem?
我在ThreadPool.QueueUserWorkItem() 启动的后台线程中捕获异常,并通过共享实例变量将它们传播到主线程。
后台线程这样做:
try
{
... stuff happens here...
}
catch (Exception ex1)
{
lock(eLock)
{
// record only the first exception
if (_pendingException == null)
_pendingException = ex1;
}
}
_pendingException 有多个潜在的编写者——多个后台线程——所以我用锁保护它。
在主线程中,我必须在读取_pendingException之前获取锁吗?或者我可以简单地这样做吗:
if (_pendingException != null)
ThrowOrHandle();
编辑:
ps:我宁愿不锁定读者线程,因为它在热路径上,而且我会非常非常频繁地获取和释放锁定。
【问题讨论】:
-
你描述的zdnet不是你吗?
-
除了传回的异常之外,您是否正在做任何事情?或者您可以使用 bool 来标记发生了错误吗?
-
zdnet?不,我什至不知道那是什么。嗯,承租人……我是不是在使用例外……嗯,是的。我从主线程重新抛出它。
标签: c# .net multithreading exception queueuserworkitem