C# 处理Quartz.NET的正确方法?

C# 处理Quartz.NET的正确方法?,c#,.net,quartz.net,C#,.net,Quartz.net,我正在一个应用程序中使用Quartz.NET。处理Quartz.NET的正确方法是什么 现在我只是在做 if (_quartzScheduler != null) { _quartzScheduler = null; } 这就足够了,还是应该在jobType类中实现dispose或其他东西 赛斯文档中没有提到isScheduler实现IDisposable的任何内容。如果您有获取和保存资源(文件锁、数据库连接)的自定义作业类型,则可以在对象上实现IDis

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

现在我只是在做

    if (_quartzScheduler != null)
    {
        _quartzScheduler = null;
    }
这就足够了,还是应该在jobType类中实现dispose或其他东西


赛斯

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

这不是一个完整的示例,但可能会让您走上正确的道路。我将实现如下内容:

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
功能的同时实现代码,您可以使用
语句来使用
,完成后,它将干净地处理您的资源并保持整洁。(免责声明,同样,这不是一个完整的示例,只是为了让您了解正确的方向)。

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

你可以参考类似的帖子

scheduler.Shutdown(waitForJobsToComplete: true);
当然,如果您还没有使用C#4.0,命名参数就不起作用:

scheduler.Shutdown(true);

设置为null在.NET中没有任何用处。没有任何与处理objectsbtw相关的用处。。。无需检查_quartzScheduler是否为空,只需将其设置为。。。最终结果是一样的,代码是ClearMario…谢谢…你是对的。这是一个老习惯,可以追溯到VBA。赛斯