Pregunta

Quiero implementar un tiempo de espera en la ejecución de tareas en un proyecto que utiliza el CCR. Básicamente cuando publico un artículo a un puerto o poner en cola una tarea a un DispatcherQueue Quiero ser capaz de abortar la tarea o el hilo que se ejecuta en su si se tarda más de un tiempo configurado. ¿Cómo puedo hacer esto?

¿Fue útil?

Solución

Puede confirmar lo que están pidiendo? ¿Está ejecutando una tarea larga vida en el Dispatcher? Matar el hilo se rompería el modelo CCR, por lo que necesita para ser capaz de indicar al hilo para terminar su trabajo y rendimiento. Asumiendo que es un bucle que no está terminando lo suficientemente rápido, puede optar por poner en cola un temporizador:

var resultTimeoutPort = new Port<DateTime>();
dispatcherQueue.EnqueueTimer(TimeSpan.FromSeconds(RESULT_TIMEOUT), 
                             resultTimeoutPort);

y asegure la rosca de bloqueo tiene una referencia de que dispone resultTimeoutPort. En el bucle de bloqueo, una de las condiciones de salida podría ser:

do
{
    //foomungus amount of work
}while(resultTimeoutPort.Test()==null&&
       someOtherCondition)

Por favor enviar más información si estoy ladrando al árbol equivocado.

Otros consejos

Se puede registrar el hilo (Thread.currentThread) al comienzo de su CCR "Recibir" manipulador (o en un método que llama a su método a través de un delegado). A continuación, puede hacer su comprobación periódica y abortar si es necesario, básicamente, de la misma manera que lo habría hecho si ha creado el hilo de forma manual. El problema es que si usted utiliza su propia Microsoft.Ccr.Core.Dispatcher con un número fijo de hilos, no creo que hay una manera de conseguir esos hilos de vuelta una vez que los abortar (basado en mis pruebas). Por lo tanto, si su despachador tiene 5 hilos, usted sólo será capaz de abortar 5 veces antes de la publicación ya no funcionará independientemente de las tareas que se han registrado. Sin embargo, si se construye un DispatcherQueue utilizando el grupo de subprocesos CLR, todos los hilos de CCR que abortan serán reemplazados automáticamente y no tendrán ese problema. Por lo que he visto, aunque se recomienda el despachador CCR, creo que con el grupo de subprocesos CLR es el camino a seguir en esta situación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top