gpt4 book ai didi

ASP.NET 后台线程

转载 作者:行者123 更新时间:2023-12-02 16:10:15 25 4
gpt4 key购买 nike

我正在开发一个包含 WCF 服务的 ASP.NET 应用程序,该应用程序旨在充当模拟生产环境的测试替身。它代表一个非常复杂的后端,可以通过其网络服务接收订单,然后在数小时或数天后发送通知(通过调用其他系统上的网络服务)。

此测试双重应用程序第一个版本的要求之一是它是无状态的,即没有数据库。

不再参与该项目的原始开发人员实现的设计是:

  1. 通过网络服务接收订单。
  2. 生成后台线程
  3. 向客户返回预设回复
  4. 然后后台线程休眠 5 - 30 秒,发送通知,再次休眠,发送通知,可能重复三到四次,最后在无事可做时终止

线程休眠 5 - 30 秒旨在模拟生产系统长达数小时和数天的延迟。每个后台线程的生存时间不会超过三分钟。

目前,该设计似乎能够很好地实现其目的。到目前为止,这种方法遇到的唯一问题是,如果发生导致应用程序重新启动的情况(web.config 更改、部署新的 DLL、重新启动 IIS 等),则后台线程似乎会被终止,并且任何挂起的通知都会被终止。后台线程永远不会发生。

客户现在认为 5 - 30 秒的延迟太短,通知之间延迟 5 分钟更为合适。这意味着后台线程的生命周期可能会超过 20 分钟。

我的直觉是,对于这个设计来说,延迟五分钟可能不是一个好主意。我很想知道人们对此有何想法。

随着延迟的增加,该设计的可靠性如何?有没有人有过在 ASP.NET 中长时间运行后台线程的经验可以对此发表评论?

最佳答案

永远不应该像本应用程序中那样进行“ sleep ”操作;你已经明白为什么会这样了。增加延迟会成倍增加任务未完成的时间,时间越长,应用程序池回收的机会就越大。

创建一个单独的 Windows 服务可能是值得的,网站/服务可以连接到该服务并启动这些长时间运行的任务。 Windows 服务不会像 ASP.NET 服务那样自动回收自身。您可以使用WCF来促进ASP.NET和Win服务之间的通信。

关于ASP.NET 后台线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6274167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com