Say I créer manuellement une tâcheCancellationTokenSource vs mettre fin à la tâche
bool aBoolean = true;
Task.Factory.StartNew(() =>
while(aBooloean) {
...
}
}
Est-il préférable de quitter la tâche en ayant une valeur booléenne globale pour quitter la tâche?
Ou est-il préférable d'utiliser CancellationTokenSource?
Quand est-il approprié d'utiliser CancellationTokenSource pour mettre fin à une tâche? Est-ce que cela lance une exception quand vous utilisez CancellationTokenSource et laissez les choses dans un état incohérent?
Merci
Je ne le savais pas, donc si je définissais le booléen global, il finirait par capter le changement? Ou le changement sera-t-il seulement retardé parce que c'est dans un cache? – TheWommies
Cela dépend de plusieurs circonstances; parfois jamais. Vous pouvez utiliser un champ booléen comme celui-ci, à condition que vous le déclariez 'volatile' ou que vous utilisiez' Thread.VolatileWrite' et 'Thread.VolatileRead'. L'un des avantages de 'CancelationTokenSource' est qu'il est découplé d'une implémentation particulière. Ainsi, vous pouvez partager un jeton entre plusieurs tâches que vous n'avez pas écrites ou tout autre code qui prend en charge un jeton d'annulation. ce qui est très utile si vous faites des tâches en parallèle sur plusieurs classes. –