Je suis actuellement dans le processus de modernisation de longue exécution de méthodes pour être annulable. Je suis de la planification sur l'utilisation du Système.Le filetage.Les tâches.CancellationToken à la mettre en œuvre.
Nos méthodes généralement effectuer un peu longue étapes de l'envoi des commandes et puis d'attendre pour le matériel la plupart du temps), par exemple
void Run()
{
Step1();
Step2();
Step3();
}
Mon premier (peut-être stupide) de la pensée sur l'annulation à les transformer en
bool Run(CancellationToken cancellationToken)
{
Step1(cancellationToken);
if (cancellationToken.IsCancellationRequested)
return false;
Step2(cancellationToken);
if (cancellationToken.IsCancellationRequested)
return false;
Step3(cancellationToken);
if (cancellationToken.IsCancellationRequested)
return false;
return true;
}
qui, franchement, semble horrible. Ce "modèle" continuera à l'intérieur de l'unique étapes, (et ils sont nécessairement assez longuets déjà). Ce serait faire du Fil.Abort() l'allure plutôt sexy, même si je sais que c'est pas recommandé.
Est-il plus propre patron pour réaliser ce qui ne se cache pas loin de la logique de l'application en dessous de beaucoup de code réutilisable?
Modifier
Comme un exemple de la nature des mesures, l' Run
méthode pourrait lire
void Run()
{
GiantRobotor.MoveToBase();
Oven.ThrowBaguetteTowardsBase();
GiantRobotor.CatchBaguette();
// ...
}
Nous sommes le contrôle de différentes unités matérielles qui doivent être synchronisés à travailler ensemble.