Microsoft在使用 IHostedService 和 BackgroundService 类在微服务IHostedService中实现后台任务的永久/连续示例使用while+ Task.Delay'pattern'。这用代码片段说明,简化版本就在下面。
public class GracePeriodManagerService : BackgroundService
(...)
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
//Do work
await Task.Delay(timeSpan, stoppingToken);
}
}
这种模式受到缓慢转变的影响 - 工作每timeSpan+完成一次how_long_work_took。即使在how_long_work_took一段时间内非常小,它也会加起来。
我想避免timeSpan根据work花费的时间进行计算。
运行每个fixed_amount_of_time的稳健解决方案是什么?.
大声思考:如果我使用任务调度程序库,比如HangFire,在里面ExecuteAsync使用IHostedService/BackgroundService甚至更有意义吗?
奖励是能够在某个时间点(例如午夜)运行任务
慕尼黑的夜晚无繁华
慕斯709654
相关分类