如何取消任务的继续执行?

5

我的类有一个方法,使用TaskCompletionSource<int>生成一个Task<int>对象。然后它执行一些异步操作并设置结果。我需要知道是否可以信任任务的ContinueWith方法:

public Task<int> CalculateAsync()
{
    var source = new TaskCompletionSource();
    DoSomeAsyncStuffAndSetResultOf(source);

    source.Task.ContinueWith(t => Console.WriteLine("Is this reliable?"));
    return source.Task;
}
< p > 调用 < code > CalculateAsync 方法的调用者是否可以对生成的任务进行操作,并阻止其继续运行?

1个回答

4
您可以将CancellationToken传递到各种ContinueWith的重载中...这应该是最习惯用法,仅取消延续,依我看来。

我认为您无法对任务做任何事情来取消延续。不管怎样,我希望不会有这种情况发生...

编辑:好的,听起来您正在尝试让它发生。不,您不需要担心。除非调用者能以某种方式使任务永远运行而永远不完成、被取消或出错,否则延续将运行。


哦,我明白了 - 不,继续运行(假设调用者不能强制任务永远运行,从而永远不会完成)。 - Jon Skeet
在看到你的编辑后,我删除了评论。如果在我设置任务结果之前他调用Dispose会怎样? - Şafak Gür
1
根据Task.Dispose的文档,这将引发InvalidOperationException异常。 - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接