我正在实现一种方法 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/