如何取消任务的延续?

Şaf*_*Gür 5 c# asynchronous task-parallel-library

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

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

    source.Task.ContinueWith(t => Console.WriteLine("Is this reliable?"));
    return source.Task;
}
Run Code Online (Sandbox Code Playgroud)

CalculateAsync方法的调用者可以对生成的任务执行某些操作并阻止其继续运行吗?

Jon*_*eet 4

您可以将 a 传递到 ...CancellationToken的各种重载中ContinueWith,这将是取消延续的最惯用的方法,IMO。

我认为您无法对任务执行任何操作来取消延续。无论如何,我希望不会……

编辑:好吧,听起来你正在努力不让这种情况发生。不,你不需要担心。除非调用者能够以某种方式使任务永远运行而不会完成、被取消或出错,否则延续将运行。