使用Task作为返回类型从非异步方法返回什么?

时间:2014-05-09 09:21:12

标签: c# async-await

假设我有一个非异步但返回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.

2 个答案:

答案 0 :(得分:21)

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

Task.CompletedTask

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

答案 1 :(得分:17)

您无法返回Task.Yield(),它不是Task而是YieldAwaitableawait一起使用,它实际上引入了异步(I {发布了一些more details here)。

我为此目的使用Task.FromResult(Type.Missing)。也许,最有效但尽管未记录的选项是Task.Delay(0)it returns a static completed task