【问题标题】:Async return Task method异步返回任务方法
【发布时间】:2020-02-12 03:09:52
【问题描述】:

我的方法是这样的:

public override async Task ReceiveAsync(WebSocket socket, WebSocketReceiveResult result, byte[] buffer)
{
    string value = Encoding.ASCII.GetString(buffer, 0, result.Count);

    var message = Message.Create(value);

    if (message is CallMessage callMessage)
    {
        await OnCall(socket, callMessage);
    }

    await Task.CompletedTask; // ??? -> Does it require here?
}

如果代码没有进入if块,是否需要在方法末尾写await Task.CompletedTask

【问题讨论】:

  • 不,最后的await Task.CompletedTask 不是必需的,因为返回类型实际上是void
  • 当方法被标记为异步时,编译器会为你返回任务

标签: c# .net async-await


【解决方案1】:

不,你没有。

await Task.CompletedTask 什么都不做。

【讨论】:

  • "什么都不做" - 好吧,除了生成更多 CIL 我猜
  • @MichaelRandall:好点。这是一种无所作为的低效方式。 :)
猜你喜欢
  • 2019-01-22
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 2012-08-09
  • 1970-01-01
  • 2015-01-12
  • 2014-10-01
相关资源
最近更新 更多