gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:01:41 24 4
gpt4 key购买 nike

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

services.AddHostedService<EmailAndSmsService>();
但这会立即运行服务 - 即在应用程序启动时。
我想在 API 收到来自前端的请求时运行该服务。即在 Controller 的操作方法中。
我一直在查看 Microsoft 文档中的“带有托管服务的后台任务”,如果我没记错的话,这就是我需要做的(查看标题为“在后台任务中使用范围服务”的部分):
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-5.0&tabs=visual-studio
这样对吗?我是否基本上需要创建两个服务,一个执行实际工作,另一个调用执行实际工作的服务?我在正确的道路上吗?
谢谢

最佳答案

您需要查看“排队后台服务”,您可以在其中向它提交“作业”,它会在后台队列中执行这些作业。
工作流程是这样的:

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

  • 这是关于它如何工作的一个非常冗长的解释: https://stackoverflow.com/a/63429262/1204153
    这是我之前做的一个例子: https://github.com/sonicmouse/ComputationService

    关于c# - 如何按需运行后台服务 - 而不是在应用程序启动或计时器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65938752/

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