J'ai eu exactement la même question que vous et j'ai voulu comprendre la logique de cette conception.
La accepté de répondre à eu la justification exactement. Voici la confirmation de la part de l'équipe qui a conçu cette fonction (l'emphase est mienne):
Deux nouveaux types de former la base du cadre: Un CancellationToken est
une structure qui représente un potentiel de demande d'annulation". Cette
struct est passé dans les appels de méthode en tant que paramètre et la méthode peut
sondage sur elle ou d'enregistrer un rappel pour être déclenché lorsque l'annulation est
demandé. Une CancellationTokenSource est une classe qui fournit l'
mécanisme pour initier une demande d'annulation et il a un Jeton
propriété pour l'obtention d'un jeton associé. Il aurait été naturel
pour combiner ces deux classes en une seule, mais cette conception permet d'avoir les deux
les principales opérations (mise en fonction d'une requête en annulation contre l'observation et
répondre à annulation) pour être clairement séparées. En particulier,
des méthodes qui prennent seulement un CancellationToken peut observer une annulation
demande mais ne peut pas lancer une.
Lien: .NET 4 Annulation Cadre
À mon avis, le fait que CancellationToken ne peut que constater l'état et de ne pas la changer, est extrêmement critique. Vous pouvez remettre le jeton comme des bonbons et ne jamais s'inquiéter que quelqu'un d'autre que vous, vous l'Annuler. Il vous protège contre les hostiles de la troisième partie du code. Oui, les chances sont minces, mais personnellement, je voudrais que garantie.
J'ai aussi l'impression qu'il fait de l'API propre et évite accidentelle erreur et favorise une meilleure conception de composant.
Regardons API publique pour ces deux classes.
Si vous étiez à les combiner, quand je suis en train d'écrire mon LongRunningFunction, je vais voir des méthodes semblables à celles de plusieurs surcharges de la "Annuler" qui je ne devrais pas être en utilisant. Personnellement, j'ai hate de voir la méthode dispose.
Je pense que la classe en cours de conception suit la fosse de la réussite de la philosophie, il guide les développeurs à créer de meilleurs composants qui peuvent gérer l'annulation de Tâches, puis instrument ensemble dans de nombreuses façon de créer des flux de travail complexes.
Permettez-moi de vous poser une question, avez-vous demandé quel est le but de jeton.Inscrire? Elle n'a pas de sens pour moi. Et puis j'ai lu l'Annulation dans la gestion des Threads et tout est devenu limpide.
Je crois que l'Annulation Cadre de la Conception dans le TPL est absolument parfait.