0

我遵循这一点,并认为我可以使用这种模式在无限循环中运行长时间运行的任务。这是我的代码:

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 的使用。任何建议将不胜感激。谢谢!

4

0 回答 0