.net-core - 当工作线程是事件驱动时,BackgroundService.ExecuteAsync 应该返回什么?

标签 .net-core windows-services .net-core-3.1

辅助服务是在 .NET Core 3.x 中编写 Windows 服务的新方法。 worker 类(Class)延伸Microsoft.Extensions.Hosting.BackgroundService并实现 ExecuteAsync。该方法的文档说:

This method is called when the IHostedService starts. The implementation should return a task that represents the lifetime of the long running operation(s) being performed.

当服务正在完成的工作不是通常意义上的长时间运行操作而是事件驱动时,此方法应该返回什么?例如,我正在编写一个设置 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
}

最佳答案

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

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

关于.net-core - 当工作线程是事件驱动时,BackgroundService.ExecuteAsync 应该返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63196690/

相关文章:

version - 在 ASP.NET Core 1.0.0 Web 应用程序中显示项目版本

json - 在 .NET Core 3.0 中验证字符串是否是有效的 json(最快的方式)

c# - .NET 控制台应用程序作为 Windows 服务

windows - 无法将 Go 应用程序 exe 作为 Windows 服务启动

c# - 在 .Net Core 3.1 中使用重定向和 Cookie 复制 cURL 命令

c# - Jwt Bearer 和依赖注入(inject)

c# - 使用数组属性绑定(bind)模型以在 ASP.NET Core MVC 中形成

c# - 如何停止 Windows 服务以进行升级安装?

c# - Net Core MVC API 路由 URL 编码 %20 导致空指针

asp.net-core-3.1 - 如何从 .net core 3.1 api 响应中删除 'Server' header ?