2010-11-01 11 views
5

uso la biblioteca de tareas para mi servicio de compresión de imágenes. Me gustaría comprimir muchos archivos de concurrencia. Pero quiero que el servicio se ejecute solo cuando el usuario esté inactivo (o no haya más tareas imprácticas en el programa).cómo agregar tareas prioridad funcionalidad

Sé que threadPool no es compatible con la característica "cambiar prioridad de subprocesos", por lo que la tarea también admite esta característica.

puedo desarrollar esa funcionalidad en el más alto nivel de control? (Prioridad TaskScheduler por ejemplo)

+0

implementar una prioridad de la cola – zengr

+0

zengr Podría aclarar que comentas? – Ivan

Respuesta

4

Como @zengr mencionado, se puede utilizar un patrón de cola de prioridad para resolver este problema. En realidad, hay a good sample in MSDN de implementación de colas de prioridad usando ConcurrentQueue<T> instancias por prioridad y luego envolviéndolas con una implementación personalizada de IProducerConsumerCollection<T> que extrae los elementos de la cola de mayor prioridad antes que los inferiores. Este tipo de implementación le permite a su productor determinar cuántas prioridades debería haber, asignar la prioridad cuando se agrega el artículo y le permite a su consumidor trabajar primero en los artículos con la prioridad más alta sin tener que entender el algoritmo de prioridad.

2

Puede crear un archivo personalizado TaskScheduler para la biblioteca de Tarea paralela y luego programar tareas sobre eso pasando una instancia de la misma al constructor TaskFactory.

Aquí hay un ejemplo de cómo hacerlo: Task Scheduler with priority

Cuestiones relacionadas