在 .Net 5 Web API 中,我想运行一个发送批量电子邮件和短信的后台任务。
我知道我可以创建一个继承自BackgroundService的服务,然后将其添加到Startup.ConfigureServices方法中的DI容器中,如下所示:
services.AddHostedService<EmailAndSmsService>();
但这会立即运行服务 - 即在应用程序启动时。
我想在 API 收到来自前端的请求时运行该服务。即在控制器的操作方法中。
我一直在查看微软文档中的“带有托管服务的后台任务”,如果我没有记错的话,这就是我需要做的(查看标题为“在后台任务中使用范围服务”的部分):
它是否正确?我基本上是否需要创建两项服务,一项执行实际工作,另一项调用执行实际工作的服务?我走在正确的道路上吗?
Thanks
您需要查看“排队后台服务”,您可以在其中向其提交“作业”,它将在后台队列中执行这些作业。
工作流程是这样的:
- 调用者向服务发送带有一些参数的请求
- 服务生成一个“作业”对象并立即通过 202(已接受)响应返回 ID
- 服务将此作业放入由一个维护的队列中
BackgroundService
- 调用者可以使用此作业 ID 查询作业状态并获取有关已完成数量和剩余数量的信息
- 服务完成作业,将作业置于“已完成”状态,然后返回到等待队列以生成更多作业
这是关于它如何工作的非常冗长的解释:https://stackoverflow.com/a/63429262/1204153
这是我不久前制作的一个例子:https://github.com/sonicmouse/ComputationService
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)