以Task为返回类型的非异步方法返回什么



假设我有一个方法,它不是异步的,但返回一个Task(因为定义来自一个同样用于异步实现的接口)

public Task DoWorkAsync(Guid id)
{
     // do the work
     return ...;
}

返回的最佳对象是什么?我的当前选项:

return Task.Yield();
return Task.FromResult<object>(null);
// any of the other but cached in a static field and reused.

在Microsoft.net 4.6中,Task类有一个用于此目的的静态属性。

任务。CompletedTask

https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.completedtask (v = vs.110) . aspx

你不能返回Task.Yield(),它不是Task,而是YieldAwaitable用于await,它实际上引入了异步(我在这里发布了一些更多的细节)。

我使用Task.FromResult(Type.Missing)用于此目的。也许最有效的选项是Task.Delay(0),它返回一个静态完成的任务。

最新更新