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 搜索

例如,这段代码在类似于我上面描述的场景中使用它。


以上是Task.FromCanceled的目的是什么的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>