В настоящее время я переоборудовал наши длительные методы для отмены. Я планирую использовать System.Threading.Tasks.CancellationToken, чтобы реализовать это.
В наших методах обычно выполняются несколько длительных шагов (отправка команд, а затем ожидающих аппаратного обеспечения в основном), например
void Run()
{
Step1();
Step2();
Step3();
}
Моя первая (может быть, глупая) мысль об отмене превратит это в
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;
}
который откровенно выглядит ужасно. Этот "шаблон" будет продолжаться и внутри одной ступени (и они уже довольно долговечны). Это заставит Thread.Abort() выглядеть довольно сексуально, хотя я знаю, что это не рекомендуется.
Есть ли более чистый шаблон для достижения этого, который не скрывает логику приложения под большим количеством кода шаблона?
Edit
В качестве примера для характера этапов метод Run
может читать
void Run()
{
GiantRobotor.MoveToBase();
Oven.ThrowBaguetteTowardsBase();
GiantRobotor.CatchBaguette();
// ...
}
Мы контролируем различные аппаратные блоки, которые необходимо синхронизировать для совместной работы.