Pregunta

Tengo que llamar a un par de métodos de forma asíncrona con diferentes prioridades.

Mi primera idea era utilizar el ThreadPool y cambiar la prioridad del hilo de esta manera:

static void Run()
{
  ThreadPool.QueueUserWorkItem(new WaitCallback(SomeMethod));
}

static void SomeMethod(object o)
{
  Thread.CurrentThread.Priority = ThreadPriority.BelowNormal; // is this ok?
  // do some work here
}

funciona eso o ¿qué recomienda?

¿Fue útil?

Solución

De acuerdo con http://msdn.microsoft.com/en-us /library/0ka9477y.aspx , no va a funcionar si se dirigen a 2.0, se alude a la existencia de algunas diferencias en 3.5, pero no menciona específicamente prioridad:

  

Cuando no utilizar subproceso del grupo de subprocesos

     

Existen varios escenarios en los que es apropiado para crear y gestionar sus propios hilos en lugar de utilizar hilos de rosca de la piscina:

     
      
  • Es necesario un hilo plano.

  •   
  • Se requiere un hilo para tener una prioridad particular.

  •   
  • Usted tiene tareas que hacen que el hilo para bloquear durante largos períodos de tiempo. La piscina hilo tiene un número máximo de hilos, por lo que un gran número de hilos de grupo de subprocesos bloqueados podría impedir que las tareas de partida.

  •   
  • Es necesario colocar los hilos en un apartamento de subproceso único. Todas las roscas son ThreadPool en el apartamento multiproceso.

  •   
  • Es necesario tener una identidad estable asociado con el hilo, o dedicar un hilo a una tarea.

  •   

Es probable que necesita para llegar con su propia aplicación, y manejar la creación de subprocesos directamente.

Pregunta: ¿Qué está tratando de lograr lo que tiene un conjunto de tareas para ser procesado y desea tareas de alta prioridad que ocurrir primero, y los inferiores a suceder más adelante; o usted quiere realmente Hilos de diferente prioridad?

Otros consejos

Eso es definitivamente horribles idea.

En términos generales, el establecimiento de una prioridad proceso o subproceso es una mala idea, ya que no es determinista, y usted podría morir de hambre a cabo otros hilos / procesos en el acto. También, que en realidad podría elevar la prioridad de menor prioridad hilos / procesos a causa de la inanición.

Además de eso, las discusiones del grupo de subprocesos están destinados a ser reutilizados, y cambiando la prioridad de la rosca, que están cambiando las expectativas de la tarea que hará que el hilo para su uso después de sus carreras de rutina.

Una vez dicho esto, usted tiene dos opciones. Si sólo necesita dar prioridad a sus tareas y no les importa si otros elementos no relacionados con sus tareas se ejecutan antes que la suya, a continuación, se puede utilizar el grupo de subprocesos con un patrón productor al consumidor, con un poco de código de contenedor que tendrá el elemento de mayor prioridad de la cola.

Si desea que los procesos únicamente para ejecutar sus tareas, entonces usted tiene que crear su propio grupo de subprocesos (utilizando la clase System.Thread) y luego hacer lo mismo, utilizando código de contenedor para obtener la tarea de ejecutar dependiendo de la prioridad .

Las nuevas clases en el espacio de nombres System.Threading en .NET 4.0 (no publicado aún) se encargará de la creación de un grupo de subprocesos por separado para ti.

Creo que para ser limpio también debe restaurar la prioridad del hilo de vuelta al salir del método! (Uso try ... finally o algo similar)

aquí es una aplicación de la piscina de hilos preferidos viejo pero muy detallada apoyar diferentes prioridades.

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