线程的异常不会冒泡到主线程

时间:2013-02-21 12:12:11

标签: c# .net multithreading exception exception-handling

我在这里开始一项任务:

System.Threading.Tasks.Task.Factory.StartNew( () =>
    RefreshCache(crmClientInfo)).ContinueWith(
        previous => RefreshCacheExceptionHandling(previous.Exception),
        TaskContinuationOptions.OnlyOnFaulted
    );

......这是我的工人:

public void RefreshCache(CrmClientInfo _crmClientInfo)
{
    AsyncManager.OutstandingOperations.Increment();

    Timer timer = new Timer(10000);
    timer.Elapsed += delegate
    {
        throw new AggregateException("Timeout!");
    };
    timer.Start();

    OtherServices.RefreshCache(crmClientInfo);
    AsyncManager.OutstandingOperations.Decrement();
}

如果异常不在定时器定义中而在其他地方发生,则异常会正确地冒泡到RefreshCacheExceptionHandling()。但是如果它从计时器(AgregateException("Timeout!");)触发,则线程不会中断。的为什么吗

1 个答案:

答案 0 :(得分:1)

  

System.Threading.Timer类在ThreadPool上进行回调   线程,根本不使用事件模型。

在这里查看文档:{​​{3}}