c# - 创建一个完成的 Task<T>

标签 c# .net task-parallel-library

我正在实现一种方法 Task<Result> StartSomeTask()并且碰巧在调用该方法之前就已经知道结果了。如何创建 Task<T>已经完成了吗?

这是我目前正在做的:

private readonly Result theResult = new Result();

public override Task<Result> StartSomeTask()
{
    var task = new Task<Result>(() => theResult);
    task.RunSynchronously(CurrentThreadTaskScheduler.CurrentThread);
    return task;
}

有没有更好的解决方案?

最佳答案

当面向 .NET 4.5 时,您可以使用 Task.FromResult :

public static Task<TResult> FromResult<TResult>(TResult result);

要创建失败的任务,请使用 Task.FromException :

public static Task FromException(Exception exception);
public static Task<TResult> FromException<TResult>(Exception exception);

.NET 4.6 添加了 Task.CompletedTask 如果你需要一个非通用的 Task .

public static Task CompletedTask { get; }

旧版本 .NET 的解决方法:

  • 当使用 Async Targetting Pack(或 AsyncCTP)定位 .NET 4.0 时,您可以使用 TaskEx.FromResult相反。

  • 获取非泛型 Task在 .NET 4.6 之前,您可以使用 Task<T>源自 Task然后调用Task.FromResult<object>(null)Task.FromResult(0) .

关于c# - 创建一个完成的 Task<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4245968/

相关文章:

c# - 声明变量总是最佳实践吗?

.net - 无法访问我的 Docker DotNet 核心网站

c# - 'Anonymously Hosted DynamicMethods Assembly' 到底是什么,我怎样才能让它手动加载?

c# - Action 委托(delegate)中的任务实例

c# - Web API2,如何返回错误

javascript - 如何从 JavaScript 代码调用存储过程?

c# - 在 C# 中具有强类型发送者的 EventHandler

c# - 以编程方式从 Exchange 或 AD 获取“不在办公室”状态?

C# task.Start() 不运行该方法

c# - 异步/等待。方法的可等待部分的延续在哪里执行?