2009-10-16 20 views
5

Tengo que realizar varias tareas de bajo impor- tancia cuando hay disponible algún tiempo de CPU. No quiero que esta tarea funcione si se están ejecutando otras tareas de importación. Es decir, si surge una tarea de prioridad normal/alta, quiero que la tarea de poca importancia se detenga hasta que se complete la tarea de importancia.C# Prioridad de hilo inferior en el grupo de subprocesos

Hay una cantidad bastante grande de tareas de baja importancia que deben realizarse (50 a 1000). Entonces no quiero crear un hilo por tarea. Sin embargo, creo que el threadpool no permite algunas especificaciones de prioridad, ¿o sí?

¿Cómo resolverías esto?

Respuesta

2

Puede actualizar un Tema y usar un Dispatcher para enviarlo toma de various priorities.

Las prioridades son un poco centradas en la interfaz de usuario, pero eso realmente no importa.

2

No debe interferir con la prioridad regularThreadPool, ya que no es el único consumidor. Supongo que el enfoque lógico sería escribir uno propio, tal vez tan simple como una cola de productor/consumidor, utilizando su propio Thread (s) como consumidor (s), estableciendo la prioridad del hilo usted mismo.

.NET 4.0 incluye nuevas bibliotecas (el TPL, etc.) para facilitar todo esto, hasta entonces necesita un código adicional para crear un grupo de subprocesos personalizado o cola de trabajos.

+0

El truco es que no quiero comenzar las tareas dadas sus prioridades, quiero que se realicen debido a su prioridad. (es decir, una tarea de baja prioridad debería pausarse si se ejecuta una prioridad alta) – Toto

+0

NB: Estoy usando 3.5 framework – Toto

+0

Luego tendría que buscar "cola de prioridad C#" - hay muchas, pero puedo ' t recomendar directamente cualquier particular. Sospecho * que el TPL ofrecerá esto directamente cuando se libere. –

2

Cuando está utilizando la compilación en ThreadPool, todos los subprocesos se ejecutan con la prioridad predeterminada. Si te metes con esta configuración, será ignorado. Este es un caso en el que deberías rodar tu propio ThreadPool. Hace algunos años amplié el SmartThreadPool para satisfacer mis necesidades. Esto también puede satisfacer el tuyo.

0

Creé una cola compartida de objetos de tareas pendientes, con cada objeto especificando su prioridad. Luego, escriba un hilo de despachador que mire la cola e inicie un nuevo hilo para cada tarea, hasta un límite máximo de hilo, y especificando la prioridad del hilo a medida que lo crea. Es solo una pequeña cantidad de trabajo hacer eso, y puede hacer que el despachador informe la actividad e incluso ajustar dinámicamente el número de subprocesos en ejecución. Ese concepto me ha funcionado muy bien y puede incluirse en un servicio de Windows para arrancar si convierte su cola en una tabla de base de datos.

Cuestiones relacionadas