【发布时间】:2015-08-10 03:54:51
【问题描述】:
This blog post 提到了新的任务 API,包括 .NET 4.6 中引入的新 Task.CompletedTask 属性。
为什么要添加这个?这比Task.FromResult(whatever) 好多少?
【问题讨论】:
-
意图更清晰还不够吗?
-
原因是您可以通过创建处于固定状态的静态不可变任务来节省内存。如果您需要返回已完成的任务,例如您只能选择从网上下载东西,否则返回一个设置为已完成的虚拟任务,以便等待您的任务的调用者可以立即继续。到目前为止,您需要创建自己的实例并缓存它,或者每次都通过 TaskCompletionSource 再次创建它。
-
博客文章已经解释了为什么添加
Task.CompletedTask...它特别提到了“关心性能和避免分配的库代码”。现在将其与您的Task.FromResult(whatever)进行比较:这是否避免了分配?不,它没有。