meJ*_*rew 1 c# async-await .net-core
我正在查看一些旧代码,我发现一个async方法在做一些async事情,最后调用await Task.CompletedTask;如下:
public async Task SomeMethod()
{
//some code
//...
await _someService.DoStuffAsync();
await Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud)
从我读到的内容来看,删除最后一行似乎是安全的,因为它对方法执行没有功能影响,因为Task.CompletedTask它将返回一个已经完成的任务,因此它不会等待它,但我对此有第二个想法.
删除最后一行是否安全?是多余的吗?
是的,删除它是完全安全的。除了检查任务是否已完成之外,此调用不会执行任何操作。
多年前,当时async还没有,但是Task,我们必须有
public Task Something()
{
....
return Task.FromResult(0);
}
Run Code Online (Sandbox Code Playgroud)
人们在Task.CompletedTask添加时采用了这个,你会经常看到
public Task Something()
{
....
return Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud)
如果....不执行任何异步操作但您仍然必须返回一个Task.
当async可用且方法体awaits 时,该方法不必返回任何内容:
public async Task Something()
{
await SomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
但await荷兰国际集团的Task.CompletedTask-我不认为有这个地方将是有益的场景。