Ну, во-первых, почему бы вам не переключиться в режим ручного обновления?
Во-вторых, в случае длительных заданий вы все равно должны учитывать, что узлы могут выходить из строя, экземпляры служб могут бытьпереехал или сменил роль.Все подобные события прервут ваше долгосрочное задание, если вы не будете хорошо обрабатывать уведомления о завершении работы.
Службе сообщается, что она будет остановлена и т. Д. Service Fabric с помощью CancellationToken, который передается в RunAsync.,Следующее взято из документов :
Служебная фабрика изменяет основной сервис службы с отслеживанием состояния по ряду причин.Наиболее распространенными являются перебалансировка кластеров и обновление приложений.Во время этих операций (а также во время обычного выключения службы, как вы могли бы увидеть, если служба была удалена), важно, чтобы служба уважала CancellationToken.
Службы, которые не обрабатывают отмену чисто, могут столкнуться с несколькими проблемами.Эти операции выполняются медленно, поскольку Service Fabric ожидает постепенного прекращения работы служб.
И этот говорит то же самое, но немного короче о методе RunAsync:
Убедитесь, что cancellationToken передан RunAsync (CancellationToken), ипосле того, как это было сигнализировано, RunAsync (CancellationToken) корректно завершает работу как можно скорее.
В вашем случае вы должны действовать в случае отмены CancellationToken.Вам следует как-то сохранить состояние вашей текущей работы, чтобы вы могли возобновить его при следующем вызове RunAsync.
Если это действительно длительное задание, которое не может быть прервано и возобновлено каким-либо образом, вам следует подумать об этомработа, выполненная вне надежной службы, например, веб-работа или что-то еще.Или согласитесь с тем, что какая-то работа может быть потеряна.
Другими словами, вы не можете сказать Service Fabric дождаться закрытия службы.Это нарушит балансировку и надежность кластера.