【问题标题】:Maximum Amount of Time A Thread Can Run?线程可以运行的最长时间?
【发布时间】:2010-05-18 20:46:00
【问题描述】:

我有一个 Web 服务,它创建一个线程来在后台处理一些数据。我在其中一个线程被杀死的日志中看到了“System.Threading.ThreadAbortException:线程被中止”消息。我目前的假设是只要执行它正在处理的任务,线程就会运行,但是在谷歌搜索异常之后,我看到有几篇文章提到在网络中增加应用程序的 ExecutionTimeOut 属性。配置文件。我的问题是:

在 ASP.NET 中执行的线程的最大执行时间是多少?此超时是无限制的还是仍受应用程序的 ExecutionTimeOut 属性约束?

【问题讨论】:

  • 另一个需要注意的潜在问题是:响应完成后会发生什么?整个过程会被抛出吗?是否清理资源(例如生成的线程)。如果是这样,您将需要以其他方式启动线程,然后与它交流工作。
  • @TheJacobTaylor 不,这是个好主意,但是在请求完成处理后线程可以继续执行。
  • 哦,我们已经遇到过这个问题了,诀窍是确保您的新线程没有在处理由 Web 服务返回的引用,否则该引用将在 GC 期间被销毁
  • 我找到了我的线程被杀死的原因。如果您更改 web.config 文件,应用程序将重新启动,从而杀死与其关联的线程。
  • @MrGumbe 谢谢,我不确定 .NET 是否有一个 fastCGI 模式可以自动清理内容,或者这可能是一个配置选项。

标签: asp.net multithreading executiontimeout


【解决方案1】:

这是一个类似的问题。

How to know who kills my threads

只要池在运行,您就可以运行它。如果保留线程的池重新启动,那么它会等待所有线程退出,但运行页面的 Web 服务此时停止工作,您就会遇到问题。此外,如果您已经设置了池,那么如果线程在一段时间后没有停止,则在池中回收。

在我的程序中,一个索引线程运行了超过 26 个小时来完成繁重的数据库工作,并且处于静态功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多