如何按需运行后台服务 - 而不是在应用程序启动时或在计时器上运行

2023-11-23

在 .Net 5 Web API 中,我想运行一个发送批量电子邮件和短信的后台任务。 我知道我可以创建一个继承自BackgroundService的服务,然后将其添加到Startup.ConfigureServices方法中的DI容器中,如下所示:

services.AddHostedService<EmailAndSmsService>();

但这会立即运行服务 - 即在应用程序启动时。 我想在 API 收到来自前端的请求时运行该服务。即在控制器的操作方法中。

我一直在查看微软文档中的“带有托管服务的后台任务”,如果我没有记错的话,这就是我需要做的(查看标题为“在后台任务中使用范围服务”的部分):

它是否正确?我基本上是否需要创建两项服务,一项执行实际工作,另一项调用执行实际工作的服务?我走在正确的道路上吗?

Thanks


您需要查看“排队后台服务”,您可以在其中向其提交“作业”,它将在后台队列中执行这些作业。

工作流程是这样的:

  1. 调用者向服务发送带有一些参数的请求
  2. 服务生成一个“作业”对象并立即通过 202(已接受)响应返回 ID
  3. 服务将此作业放入由一个维护的队列中BackgroundService
  4. 调用者可以使用此作业 ID 查询作业状态并获取有关已完成数量和剩余数量的信息
  5. 服务完成作业,将作业置于“已完成”状态,然后返回到等待队列以生成更多作业

这是关于它如何工作的非常冗长的解释:https://stackoverflow.com/a/63429262/1204153

这是我不久前制作的一个例子:https://github.com/sonicmouse/ComputationService

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

如何按需运行后台服务 - 而不是在应用程序启动时或在计时器上运行 的相关文章

  • 实体框架 - sql server 表中未设置默认值

    SQL Server 2005 数据库表有一列 createdon 其默认值设置为 getdate 我正在尝试使用实体框架添加记录 createdon 列未更新 我是否错过了实体框架中的任何属性 请提出建议 这是实体框架存在的少数问题之一
  • 如何在自定义保存操作 WFFM 中获取 Sitecore.Current.Site 对象?

    我在用着面向营销人员的 Sitecore 网络表单 在里面save action我得到的表格Sitecore Context Site对象 但该对象没有返回正确的上下文 该值为 modules shell 有谁知道我如何才能获得正确的上下文
  • 代码块调试问题

    我正在尝试在代码块中运行一个简单的链表程序 但我无法运行该程序并且收到以下错误 Active debugger config GDB CDB debugger Default Building to ensure sources are u
  • 递归显式模板实例化以导出库的符号

    在我之前的问题中我问过递归显式模板实例化是否可能 https stackoverflow com questions 7395113 is recursive explicit template instantiation possible
  • 有没有一种简单的方法来获取 .NET 为参数化查询生成的“sp_executesql”查询?

    背景 如果我有以下程序 public class Program public static void Main using var connection new SqlConnection Server local Database Te
  • C++ 编译器可以对结构中的元素重新排序吗

    C 编译器 特别是 g 可以对结构体的内部元素重新排序吗 我看到一些奇怪的行为 其中我有一个包含如下内容的结构 Struct SomeStruct long someLong long someLongArray 25 unsigned l
  • 如何在 C++ 中的嵌套词法作用域可访问的作用域中声明静态信息?

    我想声明范围的标识符 该标识符将用于自动填充最内部范围内任何日志记录语句的字段 它们通常会 但并非总是如此 例如 lambda 使用 引入的块 匹配封闭块的 名称 用法看起来像这样 namespace app LOG CONTEXT app
  • iPhone 编程游戏

    使用 Objective C 还是 C 为 iPhone 编写游戏最好 像 Flight Control 这样的游戏会用什么语言编写 图形应采用什么格式才能在 iPhone 上正确显示并快速加载 像 Flight Control 这样的游戏
  • 轮廓积分算法 C++

    我正在尝试编写一个应用数学程序来计算复平面中的轮廓积分 对于初学者来说 我想为梯形方法编写一个算法 但我有点坚持理解它会是什么样子 毕竟 我们通常将梯形方法视为 2D 图 而这里我们有 f C gt C 所以我们谈论的是 4D 最终我希望用
  • C# - 如何从 Steam 交易 API 获取图标的 URL(编码)

    以下是 API 为每个项目返回的 XML 部分
  • 带有 Prism 区域适配器的 AvalonDock

    我看到了一些关于 SO 的问题 但似乎没有一个适合我 我希望能够使用伟大的使用 Prism 4 但是 所有示例区域适配器均适用于 Avalondock 1 x 系列 我无法使其工作 有人有关于如何为 AvalonDock 的 LayoutD
  • flowlayoutpanel和水平滚动条问题

    我正在使用一个 flowlayoutpanel 它有很多逻辑上的按钮 我遇到的问题是 当我调整窗口大小时 当窗口变小时 我无法看到所有水平排列的按钮 相反 当窗口变小时 按钮会下降到下一行 谁能帮我解决这个问题 我只是希望按钮水平排列 当窗
  • boost变体简单调用常用方法

    我有两个指针 只能设置其中之一 所以我正在考虑使用 boost variant 例如 boost variant
  • System.NotSupportedException:“集合是只读的。”从 iList 中删除对象时抛出

    运行下面的代码片段时抛出异常 我有一个 iListof webelements 如果该元素包含字符串 WSC 我想将其从 iList 中删除 谁能帮我吗 代码如下 IList
  • 从动态服务器中抓取 html 列表数据

    哈喽大家好 抱歉提出转储问题 这是我最后的手段 我发誓我尝试了无数其他 Stackoverflow 问题 不同的框架等 但这些似乎没有帮助 我有以下问题 一个网站显示一个数据列表 前面有大量的 div li span 等标签 它是一个很大的
  • DLR 返回类型

    我需要 DLR 的帮助 我正在实现 IDynamicMetaObjectProvider 和 DynamicMetaObject 但在获取预期返回类型时遇到一些问题 我在元对象中覆盖 BindInvokeMember 我可以看到所有参数类型
  • 使用 openssl 库获取 x509 证书哈希

    我目前正在开发一个应用程序 它使用 openssl 库 libcrypto 来生成证书 现在我必须获取现有证书的哈希值 当我使用终端时 我可以使用以下命令生成哈希值 openssl x509 hash in cert pem noout 输
  • OpenCV:处理每一帧

    我想使用 OpenCV 编写一个跨平台应用程序进行视频捕获 在所有示例中 我发现来自相机的帧是使用抓取功能进行处理并等待一段时间 我想处理序列中的每一帧 我想定义自己的回调函数 每次当一个新帧准备好处理时都会执行该函数 例如直播对于 Win
  • 在 4.x 内核上的 64 位内存中查找系统调用表

    我正在尝试编写一个简单的内核模块来查找 Linux 中的 sys call table 但遇到了一些麻烦 我在这里找到了 32 位 Linux 的基本指南 https memset wordpress com 2011 03 18 sysc
  • System.IndexOutOfRangeException:索引超出了数组的范围[重复]

    这个问题在这里已经有答案了 我正在开发一个 ATM 软件作为家庭作业 我想知道今天处理的交易总量 为此我编写了以下代码 public decimal getDayTransaction int accountid string date s

随机推荐

  • Android中使用MediaPlayer播放mp3文件列表

    我在 Android 中使用 MediaPlayer 重现多个 mp3 文件时遇到问题 我能够复制一个文件 但我没有找到任何有用的东西来逐个复制不同的文件 我现在用来重现一个文件的代码是 public MediaPlayer mediaPl
  • 使用 jquery 禁用输入 type="image" 的正确方法是什么?

    使用 jQuery 我尝试禁用这样的输入字段
  • 从两个字符串中获取编辑

    我将深入探讨我的问题 如果您不想阅读所有内容 可以跳至 TL DR 我正在尝试做什么 我需要存储一个 文件 文本文件 可以由用户编辑 如果我有原始文件 这可能是巨大的 Lorem ipsum dolor 坐 amet 用户要进行更改 Foo
  • 收集多组列

    我从一项在线调查中获得了数据 其中受访者回答了 1 3 次问题 调查软件 Qualtrics 将这些数据记录在多个列中 即调查中的 Q3 2 将包含列Q3 2 1 Q3 2 2 and Q3 2 3 df lt data frame id
  • 文本视图中的触摸坐标

    我在文本视图上使用触摸监听器 我可以通过运动事件获取触摸坐标 我可以获取我单击的字符索引或附近的字符坐标吗 Eg Hello Android 这是我的文字 现在我可以获得 x y 坐标 但是我可以获得字符索引吗 A 当我触摸它时 您必须重写
  • Rails 3.1 资产在生产中没有指纹

    刚开始适应rails 3 1 我开始编写coffeescript和sass 开发中一切正常 当我在生产中运行服务器时 我只得到 在页面的源代码中 没有生成哈希码 并且两个资产都有路由错误 Routing Error No route mat
  • C中“==”运算符的返回值

    我是否可以假设在 C 中 如果两个值相等 运算符将始终计算为 1 或者它可以计算为其他 真 值 struct ss int id struct os int sid int state int count struct ss s int s
  • 使用 ABAP 7.40+ 语法进行最有效的 itab 过滤

    在 7 40 版本中 我们有很多方法来过滤内部表数据 例如 可以使用这样的 ABAP 结构 FILTER操作员 DATA lt extract FILTER lt bseg USING KEY matnr bwtar WHERE matnr
  • 如何在node.js中保存.env文件中的更改

    I use dotenv用于读取环境变量 像这样 let dotenv require dotenv config path env console log process env DB HOST 现在我想保存更改 env文件 我找不到任何
  • 什么是非线性模式

    我正在阅读有关servant api DSL 参见 pdfhere 引用自第 5 2 节 类型安全链接 强调是我添加的 type family ElSymbol e s Symbol a Bool where ElSymbol s gt e
  • 如何使用自定义的类文件对象作为子进程 stdout/stderr?

    考虑这段代码 其中subprocess Popen被催生 我想写入子进程 stdout and stderr转到我的自定义文件对象 write 方法 但事实并非如此 import subprocess class Printer def i
  • PL/pgSQL 匿名代码块

    在 PostgreSQL 9 0 中 我有这个 PLPGSQL 匿名代码块 DO DECLARE bigobject integer BEGIN SELECT lo creat 1 INTO bigobject ALTER LARGE OB
  • Android任务亲和性的使用

    我正在阅读有关任务亲和性的内容并创建了一个具有以下活动的演示应用程序 A B gt 任务亲和力 com ando C D gt 任务亲和力 com ando E 据说 具有相同任务亲和性的活动会秘密打开另一个活动的单个实例 因此 我在每个活
  • Android 深色模式:夜间值不起作用

    我正在我的应用程序中开发日 夜功能 因此我阅读了这些文档并开始开发它 它在白天或夜间的默认值下工作正常 用精细方法AppCompatDelegate setDefaultNightMode 用于定制night我创建的主题颜色价值观之夜文件夹
  • java中如何找出谁创建了线程?

    在tomcat中 如果web应用程序确实停止了非守护线程 则tomcat无法通过shutdown sh关闭 例如 public class demo implements ServletContextListener public void
  • NSTextAlignment 对齐到 UILabel 文本对齐在 iOS6 上会崩溃

    我现在使用Xcode 4 5和iOS6 iOS6改变了UILabel文本对齐方式 label textAlignment NSTextAlignmentJustified 该代码将在带有 ios6 SDK 的 iPhone 6 0 模拟器上
  • 的证书与任何主题备用名称都不匹配

    错误 javax net ssl SSLException Certificate for
  • 是否有一种[直接]方法可以使用 SQL 对结果*first*、*then*按另一列进行分组?

    我看到在 SQL 查询中 GROUP BY子句必须先于ORDER BY 这是否意味着在分组之后完成排序会丢弃相同的行 因为我似乎需要首先按时间戳对行进行排序 then丢弃具有相同时间戳的行 我不知道如何实现这一点 我正在使用 MySQL 5
  • 需要帮助来理解带有 /d 的 perl tr 命令

    我在网上发现了以下 Perl 示例 usr bin perl string the cat sat on the mat string tr a z b d print string n result b b b 有人可以解释一下吗 d表示
  • 如何按需运行后台服务 - 而不是在应用程序启动时或在计时器上运行

    在 Net 5 Web API 中 我想运行一个发送批量电子邮件和短信的后台任务 我知道我可以创建一个继承自BackgroundService的服务 然后将其添加到Startup ConfigureServices方法中的DI容器中 如下所