[This blog post提到了新的Task API,包括.NET 4.6中引入的新的Task.CompletedTask属性。
为什么要添加?这比Task.FromResult(whatever)
更好吗?
Task.FromResult(whatever)
适用于Task<TResult>
,但直到4.6为止,非通用任务一无所有。您可以将FromResult
与一个虚拟值一起使用,并将其隐式转换为Task
,但这会混淆意图(您并未真正返回任何异步value)并在其下分配对象(而CompletedTask
可以缓存并在所有调用者之间共享)。
在当前(4.5.2和更早版本)的代码库中看到自定义静态完成的任务并不少见,因此,我认为将其合并到框架本身是有意义的。