在MVC应用程序中跨线程传递异常

时间:2010-07-08 15:08:21

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

我需要在构建MVC页面时调用一些web服务,所以我通过线程池来处理工作,并使用ManualResetEvents来确定何时获得我的结果。

如果其中一个线程抛出异常,它会使应用程序崩溃。我通过Filter设置了异常处理,但是我需要首先将异常恢复到主渲染线程。

我无法使用BackgroundWorker,因为我需要“加入”工作并渲染页面。

连连呢?任何人吗?

1 个答案:

答案 0 :(得分:2)

您可以使用例外保留队列,并在最终设置ManualResetEvent时检查队列,然后再继续。

private readonly Queue<Exception> _exceptions = new Queue<Exception>();


private void DoWork(object o)
{
    try
    {
        // ...
    }
    catch (Exception ex)
    {
        _exceptions.Enqueue(ex);
    }
    finally
    {
        done.Set();
    }
}