asp.net背景线程异常处理

问题描述:

在我的3.5.net web应用程序中,我有一个后台线程,它做了很多工作(应用程序类似于mint.com,因为它在后台线程上进行了大量帐户聚合) 。我在执行聚集的线程中做了大量的异常处理,但总是有可能抛出未处理的异常,并且我的整个应用程序都会死亡。我已经阅读了一些关于这个主题的文章,但他们都显得过时了,没有一个实现标准方法。现在有没有标准的方法?在ASP.NET 4.0中有没有更好的方法来处理这个问题?asp.net背景线程异常处理

你总是可以在你的工作线程周围放置一个try/catch块,它的线程非常高......就像线程启动时一样。我假设这就是你现在正在做的事情,或者类似的事情。但请记住,您绝对不希望将未知错误转变为沉默未知的错误,因为那样会出现很多难以追踪出现问题时。如果你想抓住并忘记它,请确保你记录EventLog或你的自定义应用程序日志的异常。

就像Aaronaught说的,应用程序应该当意外事件发生时死亡。但是我没有看到让后台线程退出/死掉而不是让整个应用程序进程崩溃的问题(事实上,我认为Aaron在这里不是正确的,它不会终止整个进程)我认为你的问题基本上可以翻译为:“ASP.NET中有什么神奇的东西可以突然解决我甚至不知道的问题吗?”当然,答案是否定的。但你已经知道了。 :)

可以说,如果你有一个未处理的异常,整个应用应该死亡。未处理的异常意味着您的程序处于未知/不确定状态,任何进一步的处理或用户交互都可能导致程序状态的损坏,或者更糟的是数据损坏。

你正在做正确的事情处理你的线程工作中的异常。据我所知,.NET应用程序没有办法“优雅地”处理后台线程上未处理的异常 - 它们将总是终止进程。

某些.NET Framework类,如BackgroundWorker组件,并在.NET 4使任务并行库多线程容易和处理大量的异常的脏活处理,所以如果有可能为你可以使用那些而不是来实现你自己的多线程代码,那么你绝对应该这样做。但是如果这些在特定情况下无法帮助您,那么如果您必须使用ThreadPool或纯粹的Thread,那么请确保不要让任何未处理的异常转义。