В чем разница между методом OnStop () и событием Stopping в роли Windows Azure? - PullRequest
8 голосов
/ 22 ноября 2011

Всякий раз, когда роль Windows Azure останавливается, вызывается ее метод OnStop().Оказывается, есть RoleEnvironment.Stopping событие , которое инициируется до вызова OnStop().MSDN говорит, что это событие является подходящим местом для кода отключения ролевой очистки.

В чем разница между этими двумя?Почему я должен поместить код завершения очистки ролей в событие Stopping, а не в OnStop() переопределение метода?

Ответы [ 3 ]

4 голосов
/ 06 декабря 2012

Помимо того, что механизм событий предоставляет гибкий способ присоединения обработчиков, в то время как метод OnStop должен быть определен непосредственно в классе, производном от RoleEntryPoint, есть одно существенное отличие:

The Stopping event is not raised when the virtual machine of the role
instance is rebooted.

Таким образом, событие остановки не будет инициировано, например, при перезагрузке виртуальной машины для обновления гостевой ОС.

Другое отличие заключается в следующем:

Code running in the OnStop method has 5 minutes to finish when it is called
for reasons other than a user-initiated shutdown.

Пока нет упоминанийв документации, что у события Stopping есть такой предел.

Источник:

2 голосов
/ 22 ноября 2011

События позволяют другим подписчикам в других классах выполнять некоторые действия, тогда как метод позволяет автору подкласса, такому как вы, помещать его в фактический класс и (например) изменять, какие события возникают.

1 голос
/ 22 ноября 2011

Brent Stineman (Windows Azure MVP) недавно опубликовал в блоге информацию о RoleEntryPoint и связанной с ним последовательности запуска / запуска / остановки, а также описание остановок и OnStop в описаниях последовательностей.

...