在 .NET 核心/.NET 标准中重用 Task<T>
Reusing Task<T> in .NET core/.NET Standard
是否可以将使用 Task.FromResult 创建的同一个 Task 重新用于即时返回方法(因为它已经完成了)?
我提出这个问题的原因是为了减少即时完成的异步接口的实现所产生的垃圾(Task 就是一个很好的例子,因为它只有两个可能的值)。
基于 this article about disposing of tasks,如果 .NET Core 的行为相同(是吗?),这应该是可能的。
是的,这实际上是强烈推荐的,以防您有一小部分可能同步已知的结果(来自缓存等)。同样,在Task
(不是Task<T>
)的情况下,可以使用Task.CompletedTask
。
请注意,如果 大多数 调用是同步完成的,但您 没有 可能结果的一小部分,您可能需要考虑 ValueTask<T>
,它针对这种情况进行了优化。
此处的所有内容同样适用于 .NET 和 .NET Core。
是否可以将使用 Task.FromResult 创建的同一个 Task
我提出这个问题的原因是为了减少即时完成的异步接口的实现所产生的垃圾(Task
基于 this article about disposing of tasks,如果 .NET Core 的行为相同(是吗?),这应该是可能的。
是的,这实际上是强烈推荐的,以防您有一小部分可能同步已知的结果(来自缓存等)。同样,在Task
(不是Task<T>
)的情况下,可以使用Task.CompletedTask
。
请注意,如果 大多数 调用是同步完成的,但您 没有 可能结果的一小部分,您可能需要考虑 ValueTask<T>
,它针对这种情况进行了优化。
此处的所有内容同样适用于 .NET 和 .NET Core。