10

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

现在我只是在做

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

这是否足够或者我应该在 jobType 类中实现 dispose 或其他东西?

赛斯

4

4 回答 4

11
scheduler.Shutdown(waitForJobsToComplete: true);

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

scheduler.Shutdown(true);
于 2010-06-08T23:14:43.180 回答
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;
    }       
}

然后有了这个,你可以做一些很酷的事情,比如 using 语句:

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语句,当您完成后,它将干净地处理您的资源并保持事情的整洁。(免责声明,这也不是一个完整的例子,只是为了让你朝着正确的方向前进)。

于 2010-06-07T20:53:38.593 回答
0

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

你可以参考这个类似的帖子。

于 2010-06-07T21:51:39.917 回答
0

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

于 2010-06-07T19:19:15.743 回答