处理Quartz.NET的正确方法?

时间:2010-06-07 19:12:38

标签: c# .net quartz.net

我在应用程序中使用Quartz.NET。处理Quartz.NET的正确方法是什么?

现在我正在做

    if (_quartzScheduler != null)
    {
        _quartzScheduler = null;
    }

这还不够,还是我应该在jobType类中实现一个dispose?

赛斯

4 个答案:

答案 0 :(得分:11)

scheduler.Shutdown(waitForJobsToComplete: true);

当然,如果您还没有使用C#4.0,则命名参数不起作用:

scheduler.Shutdown(true);

答案 1 :(得分:1)

这不是一个完整的例子,但可能会让你走上正确的道路。我会实现这样的事情:

class customSchedulerClass : IDisposable
{

    private Component component = new Component();
    private bool disposed = false;

    public void scheduleSomeStuff()
    {
        //This is where you would implement the Quartz.net stuff
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SupressFinalize(this);
    }

    private void Dispose(bool disposing)
    {
        if(!this=disposed)
        {
            if(disposing)
            {
                component.dispose;
            }
        }
        disposed = true;
    }       
}

然后,你可以做一些很酷的事情,比如使用语句:

public static void Main()
{
    using (customSchedulerClass myScheduler = new customSchedulerClass())
    {
        c.scheduleSomeStuff();
    }
    console.WriteLine("Now that you're out of the using statement the resources have been disposed");
}

因此,基本上通过在继承IDisposable功能的同时实现代码,您可以使用using语句,当您完成它时,它将干净地处理您的资源并保持良好和干净。 (免责声明,这不是一个完整的例子,只是为了让你朝着正确的方向前进)。

答案 2 :(得分:0)

文档没有说明IScheduler实现IDisposable的任何内容。如果您具有抓取和保留资源(文件锁,数据库连接)的自定义作业类型,则可以实现IDispoable并覆盖对象上的Dispose()以释放资源。

答案 3 :(得分:0)

通常我们不需要将对象设置为null以便将其丢弃。 如果一个对象包含非托管资源,那么它应该实现IDisposable(并由其所有客户端调用)。

你可以参考this类似的帖子。