Web 服务中的 ThreadPool.QueueUserWorkItem 用于“即发即忘”任务

2024-01-05

这是 ASP.NET ASMX Web 服务/.NET Framework 4.0。

在 Web 服务中,我想在另一个线程上执行一个方法,例如“Fire and Forget”,以便 Web 服务返回一些价值立即响应网站。 Web 服务立即将响应返回到网站后,另一个线程上的该方法可能需要 10 分钟。另外,我不需要该方法的返回值。

我已经使用 ThreadPool.QueueUserWorkItem 测试了此场景,似乎使用 ThreadPool 启动的线程即使在 Web 服务将响应返回到网站后仍将继续执行。我在这里说得对吗?还有更好的方法来实现这一目标吗?


问题是,ASP.NET 会时不时地回收应用程序池。因为它不知道您的后台任务,所以当 AppDomain 被处置时,它不会被考虑并被中止。

大多数时候,工作都会完成,但如果运行足够长的时间,就会遇到这种情况。

有两种解决方案:

1) “正确”的方法是编写一个在 ASP.NET 外部运行的 Windows 服务。您可以通过 WCF 向服务发送指令。

2) “快速而肮脏”的方法是在 ASP.NET 站点中编写一个永远不会被用户调用的隐藏 Web 服务。您的应用程序启动对隐藏服务的异步请求,然后将其自己的结果返回给用户,无需等待。

ASP.NET 不知道对隐藏服务的请求来自您的应用程序内部 - 它只是将其视为另一个请求。因为 ASP.NET 知道这个请求,所以它在回收时不会中止它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web 服务中的 ThreadPool.QueueUserWorkItem 用于“即发即忘”任务 的相关文章

随机推荐

  • java系统范围的键盘和鼠标状态

    有没有办法在系统范围内侦听鼠标和键盘事件 而不将它们从系统队列中取出 例如 有没有办法设置一个恶魔 比如说 它会监听并报告每个键盘和鼠标事件 使用纯Java 是不可能的 但是您可以使用 JNI Java 本机接口 它适用于用 C 编写并本机
  • UPDATE 语句包含在 IF EXISTS 块中

    我正在尝试编写一个更新列的 DML 脚本 但我想确保该列首先存在 因此我将其包装在 IF EXISTS 块中 IF EXISTS SELECT FROM INFORMATION SCHEMA COLUMNS WHERE TABLE NAME
  • 如果消息被编辑,防咒骂系统将不起作用

    基本上 如果您说了一些不是脏话的内容 但随后将消息编辑为脏话 机器人将不会检测到它 我该如何解决 这是我的代码 client event async def on message message if message author bot
  • 通过选择散点图上的点来更新虚线表

    我正在制作仪表板 这是我的代码 IMPORT SECTION import dash import dash table import dash core components as dcc import dash html compone
  • 非静态类与静态类相比有哪些优点?

    非静态类与静态类相比有哪些优点 静态类不需要实例化 所以我们可以直接使用ClassName MemberName 那么非静态类有什么用呢 静态类与非静态类基本相同 但有一个区别 静态类不能被实例化 换句话说 不能使用new关键字来创建类类型
  • Sublime Text 3 上的 Python 3.4

    我按照以下步骤在 Sublime Text 3 上运行 Python 3 选择菜单 工具 gt 构建 gt 新建构建系统 我输入了以下内容 cmd python3 file selector source python file regex
  • 显示同一类方法的已弃用警告

    使用 eclipse 我希望尽快看到警告any我使用的方法标记为 Deprecated 如果是这样 方法调用将被正确划掉 但如果该方法源自同一个类 则 Eclipse 不会发出警告 请参阅下面的屏幕截图 为了更好地重现 我还将提供文本形式的
  • python 如何在数据框中执行以下操作

    df1 pd DataFrame Year 1A 2A 3A 4A 5A Tval1 1 9 8 1 6 Tval2 34 56 67 78 89 它看起来更像这样 我想更改它 使其看起来像这样 第二列移动到单独的行下方 想法是从中获取数字
  • 如何确定 Android View 是否被其他 View 遮挡

    我想检查特定视图 例如 TextView 是否被任何其他视图 例如导航抽屉但不一定 遮挡 我明白了 即使视图被其他视图 布局遮挡 View GetVisibilty View IsShown 也会返回 true None
  • constexpr 比 const 更“恒定”吗?

    C 编程语言第四版 Bjarne Stroustrup 强调我的 2 2 3 常数 在一些地方 语言规则需要常量表达式 例如 数组边界 2 2 5 7 3 大小写标签 2 2 4 9 4 2 一些 模板参数 第 25 2 节 和使用 con
  • io.sockets.emit 和广播有什么区别?

    io sockets emit 和 socket broadcast emit 有什么区别 广播是否只向每个人发送 但发送它的套接字除外 看起来它们可以互换使用 io sockets on connection function socke
  • 捕获when.js未处理的拒绝

    我想捕获when js 未处理的拒绝 以便我可以记录它们 为了实现这一点 我重写了 console warn 但是它可以记录除 when js 以外的我不感兴趣的内容 ref https github com cujojs when blo
  • > /dev/null 如何消耗输出流?

    我用过 dev nullbash 编程中的很多内容都将不必要的输出发送到黑洞中 例如 这个命令 echo foo bar gt dev null 将不会echo任何事物 我读过 dev null是一个空文件 用于通过重定向处理不需要的输出
  • 启动自定义 URL 的图像 - 故事板或资产目录

    我试图在自定义 url 启动应用程序时拥有自定义启动图像 有没有办法指定自定义故事板 UILaunchStoryboardName 或资产目录中的图像以在此场景中使用 从 iOS 8 3 开始这是不可能的
  • 如果目标不为空,自动映射器可以忽略目标/仅更改空字段

    背景 我正在开发一个网络服务 我希望允许具有空字段的输入表示 不进行更新 输入对象与数据库模型非常相似但不完全相同 因此我们使用自动映射器来进行转换 因此 在更新的情况下 我希望能够获取现有值 使用它们覆盖输入中的任何空字段 然后保存它以执
  • 为什么 std::ofstream 在没有 std::ios_base::trunc 的情况下截断? [复制]

    这个问题在这里已经有答案了 根据这个 C 参考 http www cplusplus com reference fstream ofstream ofstream http www cplusplus com reference fstr
  • 如何获取 PostgreSQL 支持的时区列表?

    这个问题是不言自明的 我在这里找到了这个文档 https www postgresql org docs current view pg timezone names html https www postgresql org docs c
  • 跟踪多个帐户并使用链接器时,Google Analytics“未检测到 HTTP 响应”

    我不仅试图跟踪两个不同的 GA 帐户 而且还需要在一个帐户上使用站点之间的链接器 Google 使用链接器在网站上返回 错误 未检测到 HTTP 响应 这是代码 感谢您的帮助 function i s o g r a m i GoogleA
  • IOS Safari 支持 Shadow DOM 吗?

    我的应用程序能够渲染 Shadow DOM 但检查器无法显示 Shadow 根 谁能帮我解决这个问题吗 这取决于您指的是哪种 Shadow DOM Shadow DOM v0 或 Shadow DOM v1 See http caniuse
  • Web 服务中的 ThreadPool.QueueUserWorkItem 用于“即发即忘”任务

    这是 ASP NET ASMX Web 服务 NET Framework 4 0 在 Web 服务中 我想在另一个线程上执行一个方法 例如 Fire and Forget 以便 Web 服务返回一些价值立即响应网站 Web 服务立即将响应返