运行 1 个任务与 IHostedService
Run 1 task with IHostedService
我做错了什么?
IHostedService 类 在 ASP.net 核心 HostBuilder 中注册。
然后 运行 一直在后台,即使他们没有工作要做。
无法将工作传递给他们,所以我想他们必须从数据库等动态存储中获取任务
看来他们主要是投票。或者 运行 短间隔定时器;找工作
然后当他们找到工作时,他们一次只能做 1 个。
因此,如果我的用户 (100+) 运行 在星期五(或他们希望的任何一天)报告,该服务仅轮询数据库 6.5 天,然后被限制 0.5 天以获得 100 + 生成报告。
那我怎么才能
- 控制 IHostedservice 服务的启动
- 运行 超过 1 个 IHostedservice 服务实例
- 以数据的形式发送任务到IHostedservice服务(实例)
除此之外,我还需要 10 多种不同类型的 IHostedService。 (10 多种不同的投票类型)
所以 运行在后台 运行d 只是为了轮询数据库在网络服务器和数据库服务器上占用 CPU 个周期
control the starting of the IHostedservice service
你不能。 IHostedService
的启停由Host自己控制。参见 official docs
Run more that 1 instance of the IHostedservice service
由于主机本身 IHostedService
是 运行,我相信您实际上不会想要启动多个 IHostedService
,而是您正在寻找一种方法来 以并行方式启动任务,然后等待所有任务完成。 IMO,更好的方法是创建一个委托 returns 一个由多个子任务组成的任务。此子任务将以并行方式 运行。
Send tasks in the form of data to the IHostedservice service (instance)
官方文档对此有一个excellent example:
- 您可以使用委托(一种数据形式)包装您的任务。
- 当您想将此任务发送到某个地方的 IHostedService 时(例如在 Controller 中),只需将您的任务包装器(委托实例)排入队列服务即可。
- HostedService 将等到队列中有任务,使工作项出队,然后执行该委托实例。
如果您想同时启动多个工作项,只需将多个工作项出队,然后使用Task.WhenAll启动这些任务:
await Task.WhenAll(...);
有关详细信息,请参阅 parallel-programming
我做错了什么?
IHostedService 类 在 ASP.net 核心 HostBuilder 中注册。
然后 运行 一直在后台,即使他们没有工作要做。
无法将工作传递给他们,所以我想他们必须从数据库等动态存储中获取任务
看来他们主要是投票。或者 运行 短间隔定时器;找工作
然后当他们找到工作时,他们一次只能做 1 个。
因此,如果我的用户 (100+) 运行 在星期五(或他们希望的任何一天)报告,该服务仅轮询数据库 6.5 天,然后被限制 0.5 天以获得 100 + 生成报告。
那我怎么才能
- 控制 IHostedservice 服务的启动
- 运行 超过 1 个 IHostedservice 服务实例
- 以数据的形式发送任务到IHostedservice服务(实例)
除此之外,我还需要 10 多种不同类型的 IHostedService。 (10 多种不同的投票类型)
所以 运行在后台 运行d 只是为了轮询数据库在网络服务器和数据库服务器上占用 CPU 个周期
control the starting of the IHostedservice service
你不能。 IHostedService
的启停由Host自己控制。参见 official docs
Run more that 1 instance of the IHostedservice service
由于主机本身 IHostedService
是 运行,我相信您实际上不会想要启动多个 IHostedService
,而是您正在寻找一种方法来 以并行方式启动任务,然后等待所有任务完成。 IMO,更好的方法是创建一个委托 returns 一个由多个子任务组成的任务。此子任务将以并行方式 运行。
Send tasks in the form of data to the IHostedservice service (instance)
官方文档对此有一个excellent example:
- 您可以使用委托(一种数据形式)包装您的任务。
- 当您想将此任务发送到某个地方的 IHostedService 时(例如在 Controller 中),只需将您的任务包装器(委托实例)排入队列服务即可。
- HostedService 将等到队列中有任务,使工作项出队,然后执行该委托实例。
如果您想同时启动多个工作项,只需将多个工作项出队,然后使用Task.WhenAll启动这些任务:
await Task.WhenAll(...);
有关详细信息,请参阅 parallel-programming