【问题标题】:Passing exceptions across threads in an MVC application在 MVC 应用程序中跨线程传递异常
【发布时间】:2010-07-08 15:08:20
【问题描述】:

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

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

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

建议?有人吗?

【问题讨论】:

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


    【解决方案1】:

    您可以保留有例外的队列,当最终设置 ManualResetEvent 时,请在继续之前检查队列。

    private readonly Queue<Exception> _exceptions = new Queue<Exception>();
    
    
    private void DoWork(object o)
    {
        try
        {
            // ...
        }
        catch (Exception ex)
        {
            _exceptions.Enqueue(ex);
        }
        finally
        {
            done.Set();
        }
    }
    

    【讨论】:

    • 好叫混乱。我希望有更通用的东西(我为此创建了一个基于 LINQ 的 DSL),但我想我可以在异常队列中工作而不会遇到太多麻烦。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多