5

io uso Libreria attività per il mio servizio di compressione delle immagini. Vorrei comprimere la concorrenza di molti file. Ma voglio che il servizio venga eseguito solo quando l'utente è inattivo (o non ha più attività impotanti nel programma).come aggiungere funzionalità priorità attività

So che threadPool non supporta la funzionalità "modifica priorità thread", quindi l'attività supporta anche questa funzione.

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

+0

implementare una priorità della coda – zengr

+0

zengr Potrebbe chiarire che commentate? – Ivan

risposta

4

Come @zengr accennato, è possibile utilizzare un modello di coda di priorità per risolvere questo problema. C'è in realtà a good sample in MSDN di implementare le code di priorità usando le istanze ConcurrentQueue<T> per priorità e poi lo si avvolge con un'implementazione personalizzata IProducerConsumerCollection<T> che estrae gli elementi dalla coda con priorità più alta prima di quelli inferiori. Questo tipo di implementazione consente al produttore di determinare quante priorità ci dovrebbero essere, assegnare la priorità quando l'elemento viene aggiunto e consentire al consumatore di lavorare sugli elementi con la priorità più alta prima senza dover mai capire l'algoritmo di priorità.

2

È possibile creare un oggetto personalizzato TaskScheduler per la libreria Attività parallela e quindi pianificare le attività su di esso passando un'istanza di esso al costruttore TaskFactory.

Ecco un esempio di come farlo: Task Scheduler with priority