Task.FromCanceled的目的是什么
c#
我是 TPL 的新手,对 Task 的静态 FromXXX 方法的目的感到困惑:
public class Task : ...
{
public static Task FromCanceled(CancellationToken cancellationToken);
public static Task FromException(Exception exception);
public static Task<TResult> FromResult<TResult>(TResult result);
}
让我们Task.FromCanceled举个例子,为什么我们需要这个?当我们创建一个任务时,我们要执行某事,创建一个什么也不做的取消任务的目的是什么?
回答
这是一个例子。您有一个将方法声明为返回的库Task,并考虑使用async/ await:
public interface IFoo
{
Task BarAsync(CancellationToken token);
}
但是您的代码/单元测试方法是同步的,无需等待,因此我们可以使用Task.FromResult等来实现它。
public class MyFoo : IFoo
{
public Task BarAsync(CancellationToken cancellationToken)
{
if (cancellationToken.IsCancellationRequested)
{
return Task.FromCanceled(cancellationToken);
}
return Task.CompletedTask;
}
}
请注意,您还可以在野外找到此类示例。GitHub 搜索
例如,这段代码在类似于我上面描述的场景中使用它。