.net-core - 当工作人员是事件驱动的时,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
}
解决方案
您还可以使用实际的无限延迟:
await Task.Delay(Timeout.Infinite, cancellationToken);
推荐阅读
- google-apps-script - 我无法通过 google-apps-script 代码发送 Gmail
- visual-studio-code - 如何在 Visual Studio 代码上打开界面概览
- android - 在Android N下意图打开缓存文件
- jmeter - 如何在 JMeter 的摘要报告和 HTML 仪表板报告中显示请求数据
- r - 如何创建具有不同后缀的变量的平均值?
- python - 赋值前引用的变量
- python - dash 使用 html.A 下载文件,但文件显示 html
- sql - 如何根据另一个表中的值填充一个表中的空值,其中连接基于子字符串
- linux - 无法在 kubernetes pod 中安装 curl 命令
- sql - 如何从 SQL 中的同一列返回成对的产品?