这是
this programmers question的兄弟问题.
简而言之,我们正在考虑将一些支持用户请求的工作推送到后台“正确”.如果我们走的是服务路线,这个相关的问题给了我很多想法,但是并没有真正提供任何令人信服的论据,说明为什么我们应该这样做.
我会承认,对我来说,做道德等同的能力
WorkQueue.Push(delegate(object context) { ... });
真的很引人注目,所以如果它有点困难(而不是天生就不可行),我倾向于采用后台线程方法.
所以,我知道的后台线程问题(在AppPool的上下文中):
>由于AppPool被回收,它们可能随时死亡
>解决方案:跟踪任务执行的时间,因此可以重新运行*如果需要新线程
> ThreadPool用于响应传入的HTTP查询,因此使用它可能会使IIS饿死
>解决方案:构建我们自己的线程池,同时限制线程数.
我的问题是,如果有的话,我错过了什么?在ASP.NET中使用后台线程会出现什么问题?
*问题中的任务已经安全重新运行,所以这不是问题.
ǂ假设我们没有做任何真正愚蠢的事情,比如在后台线程中抛出异常.