首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程中断了?

线程中断了?
EN

Stack Overflow用户
提问于 2010-12-27 14:15:50
回答 3查看 1.2K关注 0票数 0

Hi,

我有一个ASP.NET应用程序,其中我添加了一个Webservice,其中包含一个"fire和that“方法。在执行此方法时,它将启动一个循环(0-99999),对于每个循环,它将读取一个xml文件并将其保存到数据库中。

问题是,这个操作需要几个小时,并且通常以线程中止的异常结束?

我已经看到,您可以增加executionTimeout,这是如何:

代码语言:javascript
复制
<httpRuntime executionTimeout="604800"/>
<compilation debug="true">

但这没有帮助吗?

我还尝试在循环中添加一个thread.sleep。如果我把它设置为500,它会走一半路,如果我设置了<100,它将在线程中止异常之前执行几个1000个循环?

我怎么才能解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-27 14:17:55

不要在web服务中运行循环。相反,将其放在控制台应用程序、winforms应用程序中,甚至可能是windows服务中。使用web服务启动另一个程序。

web服务基本上是一个网页,而asp.net网页并不打算承载长期运行的进程。

本文没有直接回答您的问题,但是包含了与我的答案相关的信息片段:

http://msdn.microsoft.com/en-us/magazine/dd296718.aspx

但是,当操作的持续时间比典型的

会话持续时间(20分钟)长或需要多个参与者(如我的雇用示例)时,ASP.NET没有提供足够的支持。您可能还记得,ASP.NET工作进程会在空闲时自动关闭,并定期回收自身。这将给长期运行的操作带来很大的问题,因为这些进程中的状态将丢失。

无论如何,这篇文章读得很好。它可能会为你提供一些想法。

票数 8
EN

Stack Overflow用户

发布于 2010-12-27 14:20:05

不确定这是否是“答案”,但当您收到web服务调用时,您可以考虑将操作分派到另一个线程上。然后就可以运行到完成。但是,您可能需要考虑如何确保某人不会同时启动其中的两个进程。

票数 0
EN

Stack Overflow用户

发布于 2010-12-27 14:20:36

我有一个ASP.NET应用程序,其中我添加了一个Webservice,其中包含一个"fire和that“方法。在执行此方法时,它将启动一个循环(0-99999),对于每个循环,它将读取一个xml文件并将其保存到数据库中。

别说了,我很反对这种方法.嗯..。坏的原因有很多(比如事情的中间复位)。我将对请求进行排队,然后返回,并让队列侦听器处理事务完整性。

不管怎样,你能做的是:

  • 将一个WorkItem排队等待一个wpool线程来获取信息。
  • 立即返回。

除此之外,web服务和类似的东西对于每小时长时间运行的进程来说都不是一个好地方。勾选一个工作流,分别处理它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4539277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档