c# – 在ASP.NET中使用线程是否有任何非明显的危险?

这是 this programmers question的兄弟问题.

简而言之,我们正在考虑将一些支持用户请求的工作推送到后台“正确”.如果我们走的是服务路线,这个相关的问题给了我很多想法,但是并没有真正提供任何令人信服的论据,说明为什么我们应该这样做.

我会承认,对我来说,做道德等同的能力

WorkQueue.Push(delegate(object context) { ... });

真的很引人注目,所以如果它有点困难(而不是天生就不可行),我倾向于采用后台线程方法.

所以,我知道的后台线程问题(在AppPool的上下文中):

>由于AppPool被回收,它们可能随时死亡

>解决方案:跟踪任务执行的时间,因此可以重新运行*如果需要新线程

> ThreadPool用于响应传入的HTTP查询,因此使用它可能会使IIS饿死

>解决方案:构建我们自己的线程池,同时限制线程数.

我的问题是,如果有的话,我错过了什么?在ASP.NET中使用后台线程会出现什么问题?

*问题中的任务已经安全重新运行,所以这不是问题.
ǂ假设我们没有做任何真正愚蠢的事情,比如在后台线程中抛出异常.

解决方法

我将远离启动用于StackOverflow的IIS AppDomain中的线程.我没有任何确凿的证据来支持我要说的话,但是在IIS上工作了10年,我知道当它是城里唯一的游戏时效果最好.

还有一个替代方案,我知道这将是程序员线程上的take off on my answer.但据我所知,你已经有了一个解决方案,通过捎带工作用户请求.为什么不使用该代码,而只在调用特殊内部API时启动它.然后使用Task Scheduler调用CURL命令,该命令每隔30秒左右调用该API以启动任务.这样您就可以让IIS处理线程,并且您的代码正在处理它已经轻松完成的操作.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


c语言数组越界会怎么样
c语言指针怎么等于数组
c语言数组怎么存入文字
c语言中怎么显示数组
c语言数组元素怎么选
c语言数组怎么累加
c语言数组符号怎么输入
c语言怎么用长数组
c语言数组函数怎么输入
c语言数组怎么去掉差异
c语言怎么求解数组
c语言数组怎么用变量
c语言怎么申明数组
c语言怎么控制数组
c语言怎么计算数组长度
c语言数组怎么插星号
c语言数组怎么加长度
c语言中怎么输出数组
c语言怎么记住数组边界
c语言数组怎么输入符号