risposta

6

Il primo passa un token al tuo metodo, dove puoi fare quello che vuoi con esso. Il secondo passa il token a Task.Run che associa l'attività a quel token.

Poiché l'annullamento in .NET è cooperativo Task.Run, è possibile annullare l'attività solo se non è ancora stata avviata l'esecuzione (che non è molto utile) e il metodo può solo controllare il token di volta in volta e generare se la cancellazione è stata richiesto ma che contrassegnerà il compito come guasto anziché annullato.

Per una soluzione completa si dovrebbe effettivamente fare entrambe le cose:

var task = Task.Run(() => LongTask(1000000, cancellationToken), cancellationToken); 

In questo modo l'attività è associata con il token e si può controllare il token per la cancellazione.