我有15个工作线程并发运行。代码在SSIS包内运行,我必须保持主线程运行,直到所有工作线程都成功完成或因错误而终止。
要从工作线程捕获异常,我有一个静态异常
static Exception Main_Exception = null;
由工作线程更新。
catch (Exception ex)
{
Main_Exception = ex;
}
main方法检查Main_Exception仍为null或已更新。
if (Main_Exception != null)
{... }
对于出现的任何异常,我需要将异常详细信息插入错误日志中。我想管理main方法的catch块中的所有异常。
我设计了下面的主要方法。方法是正确的还是我错过了什么?在这种情况下,“抛出Main_Exception”或“throw”会正常工作吗?
main()
{
try{
if (Main_Exception != null)
{
throw Main_Exception; OR throw;
}
}
catch(Exception ex){
//INSERT exception-details into error-log
}
}
答案 0 :(得分:0)
您无法管理主应用程序中后台工作线程抛出的异常。
你将不得不在线程本身处理它们。
如果您希望所有日志记录都在一个地方,那么您将不得不做这样的事情:
然后将处理并记录在您的全局异常处理程序中。
答案 1 :(得分:0)
第一个想法似乎是记录它自己的线程中的每个异常。
无论如何,如果您需要跟踪多个异常,请考虑使用AggregateException
类。
您可以保留List<Exception> m_AllExceptions
(或更好,SynchronizedCollection<Exception>
,而不是您的变量MainThreadException,因为您将从多个线程访问它
然后在主线程中检查异常时,您可以使用以下内容:
if (m_AllExceptions.Count > 0 != null)
{
AggregateException ex = new AggregateException(m_AllExceptions);
throw ex;
}