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

C# 在MVC应用程序中跨线程传递异常,c#,asp.net-mvc,exception-handling,multithreading,C#,Asp.net Mvc,Exception Handling,Multithreading,在构建MVC页面时,我需要调用一些Web服务,因此我通过线程池线程化工作,并使用ManualResetEvents来确定何时得到结果 但是,如果其中一个线程抛出异常,它将使应用程序崩溃。我通过过滤器设置了异常处理,但我需要首先将异常返回到主渲染线程 我不能使用BackgroundWorker,因为我需要“加入”工作并呈现页面 建议?有人吗?您可以保留一个包含异常的队列,当ManualResetEvent最终设置时,请在继续之前检查队列 private readonly Queue<Exce

在构建MVC页面时,我需要调用一些Web服务,因此我通过线程池线程化工作,并使用ManualResetEvents来确定何时得到结果

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

我不能使用BackgroundWorker,因为我需要“加入”工作并呈现页面


建议?有人吗?

您可以保留一个包含异常的队列,当
ManualResetEvent
最终设置时,请在继续之前检查队列

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


private void DoWork(object o)
{
    try
    {
        // ...
    }
    catch (Exception ex)
    {
        _exceptions.Enqueue(ex);
    }
    finally
    {
        done.Set();
    }
}
private readonly队列_exceptions=new Queue();
私有空道工(对象o)
{
尝试
{
// ...
}
捕获(例外情况除外)
{
_例外情况。排队(ex);
}
最后
{
完成。Set();
}
}

好的呼叫混乱。我希望有更通用的东西(我已经为此创建了一个基于LINQ的DSL),但我想我可以在异常队列中工作,避免太多麻烦。谢谢