2010-06-07 17 views
9

Estoy usando Quartz.NET en una aplicación. ¿Cuál es la forma correcta de deshacerse de Quartz.NET?¿La forma correcta de deshacerse de Quartz.NET?

En este momento estoy simplemente haciendo

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

¿Es eso suficiente o debería implementar un Desechar o algo en la clase JOBTYPE?

Seth

+4

Ajuste a cero no hace nada útil en .NET. –

+0

Nada útil relacionado con la eliminación de objetos –

+0

por cierto ... no es necesario comprobar el _quartzScheduler para nulo, simplemente configúralo ... el resultado final es el mismo y el código es más claro – MaLio

Respuesta

11
scheduler.Shutdown(waitForJobsToComplete: true); 

Por supuesto, si usted no está en C# 4.0, sin embargo, los parámetros con nombre no funcionan:

scheduler.Shutdown(true); 
0

Los documentos no dicen nada acerca de la implementación de iScheduler IDisposable. Si tiene tipos de trabajos personalizados que atrapan y retienen recursos (bloqueos de archivos, conexiones de bases de datos), puede implementar IDispoable y reemplazar Dispose() en su objeto para liberar recursos.

1

Esto no es un ejemplo completo, pero puede llevarlo por el camino correcto. Me gustaría poner en práctica algo como esto:

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; 
    }  
} 

Entonces, con esto se puede hacer cosas interesantes como el uso de declaraciones:

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"); 
} 

Así que, básicamente por que la implementación de código si bien hereda la funcionalidad de IDisposable luego nos la puede using declaración y cuando haya terminado limpiará sus recursos y mantendrá las cosas limpias y agradables. (Descargo de responsabilidad, de nuevo, este no es un ejemplo completo, solo para llevarlo en la dirección correcta).

0

Generalmente no es necesario establecer un objeto como nulo para eliminarlo. Si un objeto contiene recursos no administrados, debe implementar IDisposable (y ser llamado por todos sus clientes).

Puedes opinar this similar publicado.

Cuestiones relacionadas