Вы не можете выбрать, какие экземпляры будут закрыты;вы просто изменяете количество экземпляров, и контроллер фабрики заботится о выключении экземпляров.Одна из причин связана с доменами сбоев и SLA: если бы у вас было, скажем, 4 экземпляра в 2 доменах сбоев и было закрыто два экземпляра в домене сбоев 0, теперь у вас будет 2 экземпляра в домене сбоев 1. Итак, теперь у вас есть дваэкземпляры в той же стойке, возможно, и эта стойка отключается.Теперь у вас есть ноль экземпляров, запущенных в течение определенного периода времени.
Распространение сценария прекращения работы экземпляра является распространенным сценарием, и типичным способом решения этой проблемы является использование очередей для буферизации рабочей нагрузки, а затем выполнение рабочей роли.экземпляры потребляют рабочие элементы из этих очередей.Если вы закрываете экземпляр до завершения его работы, элемент в конечном итоге снова появляется в очереди, и другой экземпляр может выполнять эту работу.
Для этого паттерна требуется идемпотентность, что иногда является проблемой.Благодаря недавнему обновлению очередей Windows Azure вы теперь можете изменять сообщения очереди, что делает это немного проще - вы можете добавлять информацию в сообщение очереди по мере выполнения различных этапов обработки вашего рабочего элемента.Затем, если ваш экземпляр выключен до завершения работы, следующий рабочий, который его заберет, может возобновить работу с точки, отличной от «начала».
Еще одна деталь: вы должны быть в состоянии обработать событие Stoppingи скажите «остановленному экземпляру» прекратить чтение из очереди (возможно, установите флаг).Затем переопределите OnStop () и дождитесь завершения внутрипроцессных операций перед возвратом.Если все еще выполняющиеся операции займут более 5 минут, вам, возможно, придется проявить творческий подход ...