【发布时间】:2014-06-21 23:16:14
【问题描述】:
在这种情况下的预期是,如果用户通过按 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();
}
}
【问题讨论】:
标签: c# .net multithreading task-parallel-library cancellation-token