在这种情况下,预期的是,如果用户通过按 Enter 取消任务,则被钩住的另一个任务ContinueWith
将运行,但事实并非如此,尽管显然没有执行其中AggregateException
的显式处理,但仍然抛出。
请对以下内容进行任何澄清?ContinueWith
class Program
{
static void Main(string[] args)
{
CancellationTokenSource tokensource = new CancellationTokenSource();
CancellationToken token = tokensource.Token;
Task task = Task.Run(() =>
{
while (!token.IsCancellationRequested)
{
Console.Write("*");
Thread.Sleep(1000);
}
}, token).ContinueWith((t) =>
{
t.Exception.Handle((e) => true);
Console.WriteLine("You have canceled the task");
}, TaskContinuationOptions.OnlyOnCanceled);
Console.WriteLine("Press any key to cancel");
Console.ReadLine();
tokensource.Cancel();
task.Wait();
}
}