使用WebRole.cs在“OnStart()”中运行自定义代码时,调用base.OnStart()的推荐方法是什么?

时间:2014-12-22 08:45:43

标签: c# azure azure-web-roles

使用WebRole.cs配置IIS时,建议您调用base.OnStart()的方式是什么?

public class WebRole : Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint
    {
        public override bool OnStart()
        {
            RunMyCode(); 
            return base.OnStart();
        }
    }

public class WebRole : Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint
    {
        public override bool OnStart()
        {
            var result = base.OnStart();
            if (result == true) { RunMyCode(); } 
            return result;
        }
    }

换句话说,“考虑基类的返回值是否有意义?”。

我(我认为)有经验的行为,有时基本函数必须返回false并且我的代码从未被调用过。

1 个答案:

答案 0 :(得分:4)

根据official documentation,,对base.OnStart的调用是该方法的最后一个陈述。 这些方法与API一样提供。 RoleEntryPoint是一个具有默认单行实现的抽象类(或根本没有实现)。同样根据same documentation,您将看到如果您返回False,您的角色实例将被停止(从而导致角色回收并且无法启动)。最后每篇文章:

  

通常,您应该避免从OnStart方法返回false。

如果您在RoleEntryPoint的源代码中查看(使用您选择的.NET反编译器),您会发现OnStart的默认实现只返回true:

using System.Threading;

namespace Microsoft.WindowsAzure.ServiceRuntime
{
  public abstract class RoleEntryPoint
  {
    public virtual bool OnStart()
    {
      return true;
    }

    public virtual void Run()
    {
      Thread.Sleep(-1);
    }

    public virtual void OnStop()
    {
    }
  }
}

与SDK的v.2.4一起使用。从早期的1.xx版开始就一直如此。