我遵循这一点,并认为我可以使用这种模式在无限循环中运行长时间运行的任务。这是我的代码:
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger, WorkerOptions options)
{
_logger = logger;
}
public override async Task StartAsync(CancellationToken cancellationToken)
{
await base.StartAsync(cancellationToken);
}
public override async Task StopAsync(CancellationToken cancellationToken)
{
await base.StopAsync(cancellationToken);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("run at: {time}", DateTimeOffset.Now);
// 1. get work items
// 2. iterate over work items (this takes about 5 minutes on average (guesstimate)
await Task.Delay(10, stoppingToken);
}
}
public override void Dispose()
{
}
}
问题是对工作项的迭代(请参阅注释点 1 + 2)未完成,并且再次调用 ExecuteAsync - 由于等待 Task.Delay(10,stopToken),大约在 10 毫秒后。我可以强制停止执行吗?猜猜这首先会破坏 ExecuteAsync 的使用。任何建议将不胜感激。谢谢!