首页 > 解决方案 > 当工作人员是事件驱动的时,BackgroundService.ExecuteAsync 应该返回什么?

问题描述

Worker Service 是在 .NET Core 3.x 中编写 Windows 服务的新方法。工人类扩展Microsoft.Extensions.Hosting.BackgroundService和实现ExecuteAsync. 该方法的文档说:

此方法在 IHostedService 启动时调用。实现应该返回一个代表正在执行的长时间运行操作的生命周期的任务。

当服务所做的工作不是通常意义上的长时间运行的操作,而是事件驱动的时候,这个方法应该返回什么?例如,我正在编写一个设置一个FileSystemWatcher. 我将如何将其封装在一个Task?没有Task.Never(),所以我应该只根据很长的时间返回一些东西Task.Delay()以防止服务关闭吗?

private async Task DoStuffAsync(CancellationToken cancel)
{
  // register events
  while(!cancel.IsCancellationRequested)
  {
    await Task.Delay(TimeSpan.FromDays(1000000), cancel);
  }
  // unregister events
}

标签: .net-corewindows-services.net-core-3.1

解决方案


您还可以使用实际的无限延迟:

await Task.Delay(Timeout.Infinite, cancellationToken);

推荐阅读