Sto tentando di annullare un'attività < chiamando il metodo CancellationTokenSource.Cancel() all'interno dell'attività, ma non riesco a farlo funzionare.Annullamento di un'attività all'interno di un'attività
Ecco il codice che sto usando:
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);
Questa stampa out:
In Task
In ContinueWith 1
In ContinueWith 2
quello che mi aspettavo era questo:
In Task
mi manca qualcosa qui? Le attività possono essere annullate solo all'esterno dello dell'attività?
Penso, non capisci il principio di cancellazione. Vedi il metodo 'CancellationToken.ThrowIfCancellationRequested'. –
Questo perché ho solo iniziato ad imparare TPL. – Intrepid
Penso che questa sia davvero una buona domanda, è stato sorpreso di essere in grado di riprodurre. –