这比不必要的情况更糟糕,因为您正在旋转一个线程而不执行任何操作,然后等到它完成执行任何操作之后。
什么都不做最简单的方法就是什么都不做。在一个async
方法该方法仍然返回一个Task
,但是那个Task
已经完成了,所以有些事情await
进一步向上将直接进入下一步需要做的事情:
public async virtual Task Save(String path)
{
if (NewWords.Any())
{
await FileManager.WriteDictionary(path, NewWords, true);
}
}
(另外,如果SaveAsync
and WriteDictionaryAsync
是这里的方法名称)。
如果不使用async
(这里没有必要,但我知道这是一个例子)使用Task.CompletedTask
:
public virtual Task Save(String path)
{
if (NewWords.Any())
{
return FileManager.WriteDictionary(path, NewWords, true);
}
return Task.CompletedTask;
}
如果您正在针对 4.6 之前的框架进行编码,因此没有CompletedTask
可用,那么Task.Delay(0)
很有用,因为Delay
特殊情况的值0
返回缓存的已完成任务(事实上,与CompletedTask
返回):
public virtual Task Save(String path)
{
if (NewWords.Any())
{
return FileManager.WriteDictionary(path, NewWords, true);
}
return Task.Delay(0);
}
但 4.6 的方式更清楚地表达了您的意图,而不是依赖于实现的怪癖。