Вы можете обработать событие Остановка , чтобы отложить остановку экземпляра (в режиме постепенного отключения).В аварийной ситуации вы не можете предотвратить отключение ...
Вот предложение по смягчению.Допустим, ваша задача управляется очередью.Давайте представим, что ваше сообщение выглядит примерно так: PROCESSWIDGET|123
.
. Вы читаете сообщение очереди в рабочем экземпляре и начинаете обработку.Вы можете изменить сообщение очереди и записать свой прогресс.Итак, в этом вымышленном примере, скажем, есть 4 шага для выполнения часового задания, каждый из которых занимает 15 минут.По завершении каждого шага вы можете обновить свое сообщение, добавив статус контрольной точки.Сразу после выполнения первой задачи вы обновляете сообщение, и теперь оно выглядит примерно так: PROCESSWIDGET|123|STEP2
.
Теперь ... что-то идет не так, и экземпляр VM по какой-то причине умирает.Со временем сообщение очереди снова становится видимым, другой рабочий экземпляр читает его и видит сообщение, к которому добавляется следующий шаг.Предполагая, что вы сохранили промежуточные файлы в хранилище BLOB-объектов (или в другом постоянном хранилище), вы можете выбрать, где остановились, и не обрабатывать заново с самого начала.
См. эту страницу MSDN для деталей метода UpdateMessage()
.