【问题标题】:Reusing Task<T> in .NET core/.NET Standard在 .NET core/.NET Standard 中重用 Task<T>
【发布时间】:2017-06-05 11:32:07
【问题描述】:

是否可以将使用 Task.FromResult 创建的相同 Task 重用于即时返回方法(因为它已经完成了)?

我提出这个问题的理由是减少即时完成的异步接口实现产生的垃圾(Task 就是一个很好的例子,因为它只有两个可能的值)。

基于this article about disposing of tasks,如果 .NET Core 的行为相同(是吗?),应该是可能的。

【问题讨论】:

    标签: c# .net .net-core .net-standard


    【解决方案1】:

    是的,这实际上是强烈推荐的,如果您有一小部分可能同步知道的可能结果(来自缓存等)。同样,在Task(不是Task&lt;T&gt;)的情况下,可以使用Task.CompletedTask

    请注意,如果大部分您的调用同步完成,但您没有有一小部分可能的结果,您可能需要考虑ValueTask&lt;T&gt;,这是经过优化的对于这种情况。

    这里的一切都同样适用于 .NET 和 .NET Core。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 2020-03-24
      相关资源
      最近更新 更多