当实现返回 Task<T>
的接口方法时,使用同步代码可以使用 Task.FromResult<T>(result)
。当结果只是 Task
时,除了使用类似于 Task.FromResult<object>(null);
这样的方法之外,是否有更好的选项?
当实现返回 Task<T>
的接口方法时,使用同步代码可以使用 Task.FromResult<T>(result)
。当结果只是 Task
时,除了使用类似于 Task.FromResult<object>(null);
这样的方法之外,是否有更好的选项?
static Task GetTask()
{
return new Task(() => { });
}
或者,如果您希望您的任务
具有返回值,您可以按照以下方式操作。
static Task GetTask()
{
return new Task<object>(() => null);
}
Task.Factory
和Task<T>.FromResult
都是工厂方法,但两者都没有比您指定的更好的选项。因此,为了创建一个新实例,您确实需要调用可能具有某些必需参数的构造函数;或者您可以使用提供的某些工厂方法。如果您发现它们都不方便,我相信自定义的工厂/助手是您的解决方案。顺便说一下,基于C#类型推断,如果您的返回类型是像整数这样的具体类型,则可以通过省略已经足够简单的类型来编写以下代码:static Task GetTask()
{
return Task.FromResult(123);
}
null
,所以类型无法推断,因此您需要在代码中指定它(object
)。
await
或.Wait()
吗? - Shaun WildeTask.FromResult
创建已完成的任务并将其向上转换为非泛型的Task
是最优雅的方法之一。不幸的是,个人认为最好坚持这种方法,并在某个静态字段中缓存一个已完成的Task
实例,并继续重复使用它。 - Kirill ShlenskiyTask.FromResult(0)
稍微短一些,但本质上是相同的。 - Alexei LevenkovTask.CompletedTask
。 - rory.ap