c# - 作为 Windows 服务部署的 BackgroundService 无法完成长时间运行的工作
问题描述
我遵循这一点,并认为我可以使用这种模式在无限循环中运行长时间运行的任务。这是我的代码:
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 的使用。任何建议将不胜感激。谢谢!
解决方案
推荐阅读
- python - 如何在 Jupyter Lab 笔记本中包含图像
- javascript - 使用 javascript 将 html 表导出到 Excel 中
- swift - SwiftUI, Why ONLY ONE 'navigationBarItems' is shown?
- jquery - Bootstrap 4 树状表问题。无法让所有孩子正确关闭
- python - 根据条件对熊猫系列进行分组
- django - 如何在 Django {% if %} 模板标签中使用运算符?
- java - Spring Data - 编写派生查询以按字段值长度进行选择
- flutter - RenderFlex 溢出错误仅出现在小部件测试中,如果我运行应用程序一切正常
- google-apps-script - 如何在触发的 Google Apps 脚本中使用 OAuth
- java - GRPC Java - 防止内存泄漏