Azure WebRole中的Quartz.Net作业

Oli*_*old 5 azure azure-worker-roles

我目前正在将WCF服务项目移植到Azure角色.到目前为止,包含该服务的库还托管了一个Quartz.Net JobFactory,用于一些轻量级后台处理(定期清理过时的电子邮件确认令牌).我是否必须将该代码移动到单独的工作者角色中?

Bit*_*KFu 9

不,您不必设置单独的辅助角色.

您只需在Web角色的OnStart()方法中启动后台线程即可.为该线程提供一个Timer对象,该对象在给定的时间跨度后执行您的方法.

因此,您可以避免新的工作角色.

class MyWorkerThread 
{
    private Timer timer { get; set; }
    public ManualResetEvent WaitHandle { get; private set; }

    private void DoWork(object state)
    {
        // Do something
    }

    public void Start()
    {
        // Execute the timer every 60 minutes
        WaitHandle = new ManualResetEvent(false);
        timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(60));

        // Wait for the end 
        WaitHandle.WaitOne();
    }
}

class WebRole : RoleEntryPoint
{
    private MyWorkerThread workerThread;

    public void OnStart()
    {
        workerThread = new MyWorkerThread();
        Thread thread = new Thread(workerThread.Start);
        thread.Start();
    }

    public void OnEnd()
    {
        // End the thread
        workerThread.WaitHandle.Set();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 即使在一小时内没有访问网站,计时器事件也会执行吗?我知道IIS可以关闭非活动站点,但我不知道Azure在这种情况下的行为. (3认同)