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

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


当前回答

你可以使用nito .AsyncEx. taskconstants .完成自Stephen Cleary的一个很棒的库。

其他回答

我最喜欢的方法是调用Task.WhenAll(),不带参数。MSDN文档声明“如果提供的数组/枚举对象不包含任务,返回的任务将在返回给调用者之前立即转换到RanToCompletion状态。”听起来是你想要的。

更新:我在微软的参考源代码中找到了源代码;你可以看到这个任务。WhenAll包含以下内容:

return (tasks.Length == 0) ? // take shortcut if there are no tasks upon which to wait
            Task.CompletedTask :
            new WhenAllPromise(tasks);

所以任务。CompletedTask确实是内部的,但是通过调用不带参数的WhenAll()来公开它。

如何:

#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的子类。

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

Task completedTask = Task.CompletedTask;

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

你可以使用nito .AsyncEx. taskconstants .完成自Stephen Cleary的一个很棒的库。