2010-11-05 11 views
7

He visto en this tutorial section de la documentación de Quartz.NET que debería ser posible definir el número máximo de hilos que el programador de Quartz va a utilizar. En mi caso especial, quiero establecer este número en 1. Pero en el doc de la API no pude encontrar una forma de acceder a la instancia de subprocesos que está usando mi planificador y establecer las propiedades en él.¿Cómo puedo establecer el número de subprocesos en Quartz.NET threadpool?

Actualmente mi código es el siguiente:

ISchedulerFactory schedFact = new StdSchedulerFactory(); 

IScheduler scheduler = schedFact.GetScheduler(); 
scheduler.Start(); 

// Setup jobs and triggers and then call scheduler.ScheduleJob... 

¿Alguien sabe cómo puedo establecer el número de hilos en la piscina?

Gracias por la ayuda de antemano!

Respuesta

2

Depende un poco del grupo que está utilizando y del archivo de configuración que está leyendo el planificador. Sin embargo, si está utilizando el estándar SimpleThreadPool.cs entonces la cantidad de hilos se puede configurar dentro del archivo quartz.config, por defecto 10 hilos se crean:

alt text

+2

Mientras tanto, encontré otra solución para mi propósito: solo tengo un JobDetail con muchos disparadores parametrizados y con el ajuste de ThreadCount en 1, quería asegurarme de que los trabajos no se ejecuten al mismo tiempo. (El método de mi ejecución no es seguro para las hebras). Pero la manera más directa de hacerlo parece ser la implementación de 'IStatefulJob' en lugar de IJob, lo que he hecho ahora (parece funcionar como yo quiero). De todos modos: Definitivamente respondiste mi pregunta y es bueno saber para el futuro que hay un archivo de configuración (que no sabía hasta ahora) y qué puedo hacer con él. ¡Gracias! – Slauma

+0

¡De nada! Si tiene razón, implementar la interfaz IStatefulJob es la mejor solución para sus necesidades. – jdecuyper

+7

@Slauma: La forma de Quartz.Net 2.x de hacerlo es decorar su clase implementando 'IJob' con' [DisallowConcurrentExecutionAttribute] ' –

27

Usted puede hacer esto mediante programación con el código de abajo si no quieren confiar en el archivo externo quartz.config por cualquier razón:

var properties = new NameValueCollection { {"quartz.threadPool.threadCount", "1"} }; 

    var schedulerFactory = new StdSchedulerFactory(properties); 
    var scheduler = schedulerFactory.GetScheduler(); 

Estoy de acuerdo con los comentarios en la respuesta aceptada a pesar de que en este caso es probable que desee utilizar en su clase [DisallowConcurrentExecutionAttribute]IJob lugar.

+0

He hecho esto, pero cuando mi clase IJob no tiene '[DisallowConcurrentExecutionAttribute]] y uso un reposo en mi trabajo, como [este ejemplo] (http://pastebin.com/kzyJYqaj) ve' int a' varias veces antes de que termine el primer trabajo. eso es porque cuando mi hilo se va a dormir, comenzó a hacer otro trabajo programado (** todavía hay un solo hilo aquí **). esto fue algo que no entendí al principio y creo que puede ayudar a otros, así que dejo este comentario aquí: D – Lrrr

1

En el archivo web.config, agregue el valor debajo de la sección de cuarzo.

<add key="quartz.threadPool.threadCount" value="20" /> 

El valor representa la cantidad de hilos que están disponibles para la ejecución concurrente de trabajos.

Cuestiones relacionadas