2014-04-24 10 views
5

Ho la mia implementazione di TaskScheduler. La ragione principale della sua esistenza è che imposterà l'affinità core del processore con il thread che esegue il mio task.Come rendere il mio TaskScheduler personalizzato quello predefinito

Quando uso nel seguente modo:

var myTaskSceduler = new MyTaskScheduler(4); 
var taskFactory = new TaskFactory(myTaskSceduler); 
taskFactory.StartNew(DoSomething); 

l'affinità funziona bene, l'attività verrà eseguita solamente sul nucleo specificato.

Come posso cambiare Task.Factory o Task.Factory.Scheduler quindi il mio scheduler sarà quello di default ogni volta

Task.Factory.StartNew() 

viene chiamato?

+0

Non è possibile. 'Task.Factory' e' TaskScheduler.Default' sono supportati da campi statici di sola lettura. L'unico modo in cui un programma di pianificazione predefinito di 'TaskFactory' può essere impostato è tramite il suo costruttore. –

risposta

0

Perché non creare il proprio metodo statico, MyTask.StartNew()? Non devi comunque specificare l'affinità come parametro?

In ogni caso, la task factory deve utilizzare lo stesso scheduler in cui ci si trova quando si chiama StartNew. Quindi, se lo fai su un compito sul programmatore corretto, dovrebbe funzionare bene. Questo dipende in realtà da come gestisci la tua pianificazione dell'elaborazione, ecc., Ma presumo che sarai comunque dipendente dal contesto se non stai passando l'affinità da nessuna parte.

+0

in realtà ne ho bisogno in modo che tutte le attività create dai miei metodi asincrona/attendi vengano pianificate utilizzando il mio scheduler. Non ci sono parametri da passare, l'affinità è hardcoded per il momento –

+0

@HadarGrubman Ah. In tal caso, assicurati di fare l'attesa nell'attività genitore corretta (che è stata avviata nello scheduler che desideri), e dovrebbe funzionare bene. – Luaan

Problemi correlati