Domanda

ho bisogno di chiamare un paio di metodi in modo asincrono con priorità diverse.

La mia prima idea era quella di utilizzare il ThreadPool e modificare la priorità del thread in questo modo:

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
}

fa quel lavoro o che cosa mi consiglia?

È stato utile?

Soluzione

http://msdn.microsoft.com/en-us /library/0ka9477y.aspx , non funzionerà se si prendono di mira 2.0, allude a che vi sia alcune differenze di 3,5, ma non menziona esplicitamente la priorità:

  

Quando non utilizzare il pool di thread Threads

     

Ci sono diversi scenari in cui è opportuno creare e gestire le proprie discussioni, invece di utilizzare le discussioni pool di thread:

     
      
  • È necessario un thread in primo piano.

  •   
  • è necessario un filo di avere una particolare priorità.

  •   
  • Hai attività che causano il filo per bloccare per lunghi periodi di tempo. Il pool di thread ha un numero massimo di thread, così un gran numero di fili pool di thread bloccati potrebbe impedire compiti avvio.

  •   
  • È necessario inserire le discussioni in un thread singolo appartamento. Tutti i filetti ThreadPool sono in appartamento multithread.

  •   
  • È necessario avere un'identità stabile associata con il filo, o di dedicare un thread per un compito.

  •   

È probabile che avrete bisogno di venire con la propria implementazione, e di gestire la creazione di thread direttamente.

Domanda: Che cosa stai cercando di ottenere avete una serie di compiti da lavorare e si desidera attività ad alta priorità per accadere prima, e quelle inferiori per accadere in seguito; o si desidera veramente Threads delle diverse priorità?

Altri suggerimenti

Questo è il sicuramente orribile idea.

In linea generale, l'impostazione di un priorità del thread o un processo è una cattiva idea, perché è non deterministica, e si potrebbe morire di fame fuori altri thread / processi in atto. Inoltre, si potrebbe effettivamente elevare la priorità di priorità più bassa thread / processi a causa della fame.

Oltre a questo, le discussioni del pool di thread sono destinate ad essere riutilizzati, e cambiando la priorità del thread, si sta modificando l'aspettativa del compito che otterrà il filo per l'uso dopo le corse di routine.

Detto questo, ci sono due opzioni. Se avete solo bisogno di dare priorità le attività e non la mente se altri elementi non correlati alla propria attività vengono eseguiti prima del tuo, quindi è possibile utilizzare il pool di thread con un modello produttore consumatore, con un po 'codice wrapper che avrà la voce di massima priorità dalla coda.

Se si desidera che i fili solo per eseguire le attività, quindi è necessario creare il proprio pool di thread (utilizzando la classe System.Thread) e poi fare la stessa cosa, utilizzando il codice wrapper per ottenere il compito da eseguire in base alla priorità .

Le nuove classi nello spazio dei nomi System.Threading in .NET 4.0 (non ancora rilasciato) si occuperà della creazione di un pool di thread separato per voi.

Credo di essere pulito si dovrebbe anche ripristinare la priorità del thread indietro quando si esce dal metodo! (Uso try ... finally o qualcosa di simile)

qui è un vecchio ma molto dettagliata attuazione piscina fili personalizzata supportare differenti priorità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top