假设我有一个非异步但返回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.
答案 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
而是YieldAwaitable
与await
一起使用,它实际上引入了异步(I {发布了一些more details here)。
我为此目的使用Task.FromResult(Type.Missing)
。也许,最有效但尽管未记录的选项是Task.Delay(0)
,it returns a static completed task。