每当Windows Azure的作用停止了OnStop()
方法被调用。原来在调用OnStop()
之前触发了RoleEnvironment.Stopping
event。 MSDN表示这个事件是角色干净关闭代码的正确位置。Windows Azure角色中的OnStop()方法和Stopping事件有什么区别?
什么是两者之间的区别?为什么我会把角色干净关闭代码Stopping
事件,而不是在OnStop()
方法重写?
每当Windows Azure的作用停止了OnStop()
方法被调用。原来在调用OnStop()
之前触发了RoleEnvironment.Stopping
event。 MSDN表示这个事件是角色干净关闭代码的正确位置。Windows Azure角色中的OnStop()方法和Stopping事件有什么区别?
什么是两者之间的区别?为什么我会把角色干净关闭代码Stopping
事件,而不是在OnStop()
方法重写?
活动允许其他类其他用户执行一些动作,而该方法允许子类作家如自己把它放在实际的类(例如)修改的事件引起人们的关注。
Brent Stineman(Windows Azure MVP)最近blogged关于RoleEntryPoint和相关的启动/运行/停止序列,并描述了序列描述中的Stopping和OnStop。
除此之外事件机制提供了一种灵活的方式来附接处理程序,而OnStop
方法必须直接从RoleEntryPoint
派生的类中定义的事实,一个相关差是这样的:
The Stopping event is not raised when the virtual machine of the role
instance is rebooted.
所以例如,当虚拟机重新启动以进行guest虚拟机操作系统升级时,不会引发停止事件。
另一个不同之处是:
Code running in the OnStop method has 5 minutes to finish when it is called
for reasons other than a user-initiated shutdown.
虽然是在阻止事件有这样一个限制的文件中没有提及。
来源:
如果你看看Azure的处理日志,你会看到5分钟限制是针对整个停止序列,所以这只是MSDN稍微错了。 – sharptooth
好了,他说,'调用OnStop()被调用'之前的事件被触发。除此之外,我没有看到任何东西。 – sharptooth
据我了解,诚然我还没有集中在测试这一点,停车是你的第一个清理警报。因此,在这一点上,您可能会停止承担更多工作(从队列中拉出,关闭内部端点侦听器)。它也更像是一个异步事件。 OnStop是您最终停止的工作,您只需5分钟即可完成操作,并直接由Azure Fabric代理调用。这一切都需要更多的探索,但仅仅是我的优先级列表并不是很高。它甚至可能是这两个项目在不同的安全环境中运行。 – BrentDaCodeMonkey