我試圖通過調用任務中的CancellationTokenSource.Cancel()方法來取消任務<>,但我無法使其工作。取消任務中的任務
這裏是代碼我使用:
TaskScheduler ts = TaskScheduler.Current;
CancellationTokenSource cts = new CancellationTokenSource();
Task t = new Task(() =>
{
Console.WriteLine("In Task");
cts.Cancel();
}, cts.Token);
Task c1 = t.ContinueWith(antecedent =>
{
Console.WriteLine("In ContinueWith 1");
}, CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, ts);
Task c2 = c1.ContinueWith(antecedent =>
{
Console.WriteLine("In ContinueWith 2");
}, TaskContinuationOptions.NotOnCanceled);
t.Start();
Console.ReadKey();
Environment.Exit(1);
此打印輸出:
In Task
In ContinueWith 1
In ContinueWith 2
我希望是這樣的:
In Task
我在這裏失去了一些東西?任務只能取消以外的的任務嗎?
我想,你不明白取消原則。請參閱'CancellationToken.ThrowIfCancellationRequested'方法。 –
那是因爲我只開始學習TPL。 – Intrepid
我覺得這是一個非常好的問題,很驚訝能夠重現。 –