【发布时间】:2010-10-22 05:14:11
【问题描述】:
这是this programmers question 的同级问题。
简而言之,我们正在考虑将一些依赖用户请求的工作“适当地”推送到后台。如果我们走服务路线,链接的问题给了我很多想法,但并没有真正提供任何令人信服的论据来说明为什么我们应该这样做。
我承认,对我来说,做道德上等同的能力
WorkQueue.Push(delegate(object context) { ... });
真的很吸引人,所以如果它有点困难(而不是天生不可行),我倾向于使用后台线程方法。
所以,我知道的后台线程问题(在 AppPool 的上下文中):
- 由于 AppPool 被回收,它们随时可能死亡
- 解决方案:跟踪任务的执行时间,以便在需要新线程时重新运行*
-
ThreadPool 用于响应传入的 HTTP 查询,因此使用它会使 IIS 饿死
- 解决方案:构建我们自己的线程池,同时限制线程数。
我的问题是,我错过了什么,如果有的话? ASP.NET 中的后台线程还有什么问题?
* 问题中的任务已经可以安全地重新运行,所以这不是问题。
ǂ 假设我们没有做任何真正愚蠢的事情,比如投掷后台线程中的异常。
【问题讨论】:
-
不是大多数线程“危险”不明显吗??
-
@Mitch - 我正在寻找 ASP.NET 特有的那些。现在可以忽略那些行人的危险,:)
标签: c# asp.net multithreading asp.net-mvc-2