【问题标题】: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/…

标签: c# .net .net-core windows-services .net-5


【解决方案1】:

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

protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
    return Task.CompletedTask;
}

或更短:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2023-04-04
    • 2020-01-24
    • 2019-01-29
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多