如何在 Windows 服务中实现啥都不做 ExecuteAsync?

Posted

技术标签:

【中文标题】如何在 Windows 服务中实现啥都不做 ExecuteAsync?【英文标题】:How to Implement Do nothing ExecuteAsync in Windows Service?如何在 Windows 服务中实现什么都不做 ExecuteAsync? 【发布时间】:2022-01-17 11:28:50 【问题描述】:

我正在实现一个 Windows 服务,我不想在 ExecuteAsync 方法中写任何东西。但是当我像下面这样保持它时,它会显示一个警告。

protected override async Task ExecuteAsync(CancellationToken stoppingToken)


警告

警告 CS1998 此异步方法缺少“等待”运算符,将运行 同步。考虑使用 'await' 运算符来等待 非阻塞 API 调用,或 'await Task.Run(...)' 来做 CPU 密集型工作 在后台线程上。

如果我删除 async 它会开始报错

并非所有代码路径都返回值

那么,让ExecuteAsync 什么都不做而没有任何错误和警告的最佳方法是什么。

目标框架: .Net5

【问题讨论】:

可以使用 --> await Task.CompletedTask; @AvanthaSiriwardana 你能解释一下为什么它会起作用吗? 由于您不从该方法返回,因此当您需要返回已完成的虚拟任务(不返回值/结果)时,Task.CompletedTask 很重要。请参考:odetocode.com/blogs/scott/archive/2018/01/18/… 【参考方案1】:

删除async 并返回Task.CompletedTask。如果方法中不需要await,请删除async。生成的代码开销会更少。 (使用异步方法将方法拆分为状态机)

protected override Task ExecuteAsync(CancellationToken stoppingToken)

    return Task.CompletedTask;


或更短:

protected override Task ExecuteAsync(CancellationToken stoppingToken) =>
    Task.CompletedTask;

【讨论】:

以上是关于如何在 Windows 服务中实现啥都不做 ExecuteAsync?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 上的 Electron Packager 啥都不做

带有 OpenCv 的 Qt 啥都不做

无服务器调用本地啥都不做

如何创建啥都不做的#define?

python ftp 服务器显示“150 文件状态正常。即将打开数据连接。”啥都不做

如何创建一个在 React 中啥都不做的函数