我想创建一个已完成的任务(不是任务<T>)。net中是否内置了一些功能来实现这一点?

一个相关的问题: 创建一个已完成的任务<T>


当前回答

你可以使用Task。FromResult(在。net 4.5中)返回一个完成的Task<T>。

如果你需要一个非泛型任务,你总是可以使用Task. fromresult(0)或类似的方法,因为Task<T>是Task的子类。

其他回答

适用于。net 4.6及以上版本

return Task.CompletedTask;

对于低版本,您可以使用

return new Task(() => { });

如何:

#pragma warning disable 1998
    public async Task emptyTask() {
    }
#pragma warning restore 1998

如果您不介意的话,可以省略警告抑制。

你可以使用Task。FromResult(在。net 4.5中)返回一个完成的Task<T>。

如果你需要一个非泛型任务,你总是可以使用Task. fromresult(0)或类似的方法,因为Task<T>是Task的子类。

我会使用Task.Delay(0)。在内部,它返回已完成Task<T>的缓存实例。这正是当前的答案所建议的,只是现在您不必自己缓存实例,也没有任何不优雅的垃圾值在您的代码中。

您可能认为可以使用Task. yield()来代替,但事实证明Task. yield()的结果不是Task的子类型,而Task. delay(0)的结果是。这是两者之间的细微差别之一。

最新版本的。net (v4.6)就是增加了一个内置任务。CompletedTask:

Task completedTask = Task.CompletedTask;

该属性被实现为无锁单例,因此您几乎总是在使用相同的已完成任务。