2011-11-22 16 views
8

Cuando se detiene una función de Windows Azure, se invoca su método OnStop(). Resulta que hay RoleEnvironment.Stopping event que se activa antes de invocar OnStop(). MSDN dice que este evento es el lugar correcto para el código de apagado de función limpia.¿Cuál es la diferencia entre el método OnStop() y el evento Stopping en el rol de Windows Azure?

¿Cuál es la diferencia entre los dos? ¿Por qué debería poner el código de apagado limpio de función en el evento Stopping y no en el método OnStop() anular?

Respuesta

2

Los eventos permiten que otros suscriptores de otras clases realicen alguna acción, mientras que el método permite que el autor de la subclase como usted lo ubique en la clase real y (por ejemplo) modifique qué eventos se generan.

1

Brent Stineman (Windows Azure MVP) recientemente blogged acerca de RoleEntryPoint y la secuencia de inicio/ejecución/parada relacionada, y describe tanto Stopping como OnStop en las descripciones de secuencia.

+1

Bueno, él dice que el evento se dispara antes de '' se invoca() OnStop. No veo nada más allá en esa publicación. – sharptooth

+4

Según tengo entendido, y debo admitir que no me he centrado en probar esto, la Parada es su primera alerta para limpiar. Por lo tanto, en este punto puede dejar de hacer más trabajo (salir de una cola, cerrar el escucha de su punto final interno). También es más un evento asíncrono. El OnStop es su último esfuerzo para detenerse y para el cual solo tiene 5 minutos para actuar y es llamado directamente por el agente de Azure Fabric. Todo esto necesita más exploración, pero simplemente no ha sido muy alto en mi lista de prioridades. Incluso podría ser que estos dos elementos se ejecuten en diferentes contextos de seguridad. – BrentDaCodeMonkey

4

Además del hecho de que el mecanismo de eventos proporciona una manera flexible para asociar controladores, mientras que el método OnStop tiene que ser definida directamente en la clase derivada de RoleEntryPoint, una diferencia relevante es la siguiente:

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

Así que la el evento de detención no se levantará, por ejemplo, cuando la máquina virtual se reinicie para la actualización del sistema operativo invitado.

Otra diferencia es la siguiente:

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

Aunque no se menciona en la documentación que el evento Detención tiene un límite.

Fuente:

+0

Si observa los registros de procesos de Azure, verá que el límite de 5 minutos es para toda la secuencia de detención, por lo que MSDN está ligeramente equivocado. – sharptooth

Cuestiones relacionadas