Domanda

io uso Task Biblioteca per il mio servizio di compressione delle immagini. Lo farei per comprimere più file concorrenza. Ma io voglio il servizio eseguito solo quando l'utente è inattivo (o attività non più impotarnt in programma).

So che ThreadPool non supporta "priorità del thread cambiamento" caratteristica, così fa anche compito supportare questa funzione.

Posso sviluppare tale funzionalità su più alto livello di controllo? (Priorità TaskScheduler per esempio)

È stato utile?

Soluzione

Come @zengr accennato, è possibile utilizzare un modello di coda di priorità per risolvere questo problema. In realtà c'è un buon campione in MSDN di attuare code di priorità utilizzando casi ConcurrentQueue<T> per priorità e poi avvolgendo che con un costume IProducerConsumerCollection<T> attuazione che tira articolo dalla coda di priorità superiore prima di quelli inferiori. Questo tipo di implementazione consente al produttore per determinare quante priorità ci dovrebbe essere, assegnare la priorità quando si aggiunge la voce e lascia il tuo lavoro al consumo degli articoli con la più alta priorità prima senza dover comprendere sempre l'algoritmo di priorità.

Altri suggerimenti

È possibile creare un TaskScheduler personalizzato per la libreria Task Parallel e poi pianificare le attività su quel passando un'istanza di esso al costruttore TaskFactory.

Ecco un esempio di come farlo: Task Scheduler con priorità

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