У вас есть несколько вариантов:
Опция A: Использовать шаблон монитора + перемотка назад
Не могли бы вы вместо этого разделить код getStatus
на другую функцию деятельности?Если да, то предположим следующее:
ActivityFunction_A
- содержит код перед циклом do-while, который опрашивает с getStatus()
ActivityFunction_B
- содержит код, который опрашивает getStatus
с максимальное время выполнения 10 минут .
ActivityFunction_C
- содержит код после getStatus
возвращает TRUE
Теперь вы можете управлять последовательностью рабочего процесса
ActivityFunction_A => ActivityFunction_B => ActivityFunction_C
с использованием шаблона Monitor .
Поскольку любая из функций деятельности может завершиться сбоем или завершится по таймауту, и при выполнении каждой функции активности могут возникнуть побочные эффекты, вам также следует использовать функцию Rewind (в настоящее время в режиме предварительного просмотра), чтобы перематывать и воспроизводить только начиная спервая неудачная функция Activity в последовательности.
Вариант B: использование плана обслуживания приложения
Если ваш рабочий процесс не нуждается в динамическом масштабировании до большого количества экземпляров, вы можете перенести свои функциина План обслуживания приложения с включенным AlwaysOn .