2012-01-27 9 views
5

Ho il seguente metodo che utilizza la pianificazione implicita:esplicitamente specificando il TaskScheduler per un metodo implicitamente prevista

private async Task FooAsync() 
{ 
    await Something(); 
    DoAnotherThing(); 
    await SomethingElse(); 
    DoOneLastThing(); 
} 

Tuttavia, da un particolare invito sito voglio correre su uno scheduler a bassa priorità al posto del valore predefinito:

private async Task BarAsync() 
{ 
    await Task.Factory.StartNew(() => await FooAsync(), 
     ..., 
     ..., 
     LowPriorityTaskScheduler); 
} 

Come ottengo questo? Sembra una domanda molto semplice, ma sto avendo un blocco mentale completo!

Nota: Sono consapevole del fatto l'esempio non sarà effettivamente compilare :)

risposta

7

Crea la tua istanza TaskFactory, inizializzata con lo scheduler desiderato. Quindi chiamare StartNew su tale istanza:

TaskScheduler taskScheduler = new LowPriorityTaskScheduler(); 
TaskFactory taskFactory = new TaskFactory(taskScheduler); 
... 
await taskFactory.StartNew(FooAsync); 
+0

Se avete bisogno di ottenere un ritorno dal attendono, si dovrebbe anche scartarlo, cioè attendono taskFactory.StartNew (FooAsync) .Unwrap; – VoteCoffee

+0

Si può aggiungere un codice o un riferimento per 'LowPriorityTaskScheduler'? – xmedeko

+0

@xmedeko: 'LowPriorityTaskScheduler' è il tipo di operazione, non il mio. –

-1

È possibile impostare filo-priorità, ma all'interno del metodo del thread:

System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.BelowNormal; 

Controllare altri valori di ThreadPriority enum.

Problemi correlati