如果OnStart()抛出异常,我可以要求Azure运行时不重新启动我的角色吗?

时间:2011-07-13 14:01:11

标签: windows debugging azure cloud

我的Azure网络角色目前包含许多错误并引发OnStart()的异常。抛出异常后,Azure运行时将再次启动该角色。这对我来说不方便 - 角色OnStart()运行到完全相同的点并再次崩溃,这将永远持续下去。一旦崩溃,我宁愿停止它。

我可以以某种方式要求Azure运行时在OnStart()因异常崩溃时不重启我的角色吗?

3 个答案:

答案 0 :(得分:2)

好吧,你可以在你的代码周围放一个try / catch,然后永远地在catch中休眠。

但不,如果你抛出一个未处理的异常或者你的进程退出,Windows Azure将尝试重新启动它。没有办法改变这种行为。

答案 1 :(得分:1)

Smarx当然是对的,但是有一些设计模式可以让你启动自己的Web角色线程,然后在调用任何未处理的异常时重新启动它们。此模式还可以让您更好地控制您的工作者角色以及何时重新启动它们以及何时不重新启动它们。请参阅此处了解此类实现:

http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com/2010/12/running-multiple-threads-on-windows.html

答案 2 :(得分:1)

看起来有点沉重,但您可以尝试使用管理API并在try catch中停止整个角色。

就我个人而言,我认为使用Thread.Sleep(Timeout.Infinite)更容易,因为smarx建议