2012-01-27 13 views
5

he el siguiente método que utiliza la programación implícita:especificación expresa de la TaskScheduler de un método implícitamente prevista

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

Sin embargo, desde un particular llamado el lugar que desee que se ejecute en un planificador de baja prioridad en lugar de la predeterminado:

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

¿Cómo logro esto? Parece una pregunta muy simple, pero estoy teniendo un bloqueo mental completo.

Nota: Soy consciente el ejemplo en realidad no compilar :)

Respuesta

7

Crea tu propia instancia de TaskFactory, inicializada con el planificador que quieras. A continuación, llame StartNew en esa instancia:

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

Si necesita obtener un retorno de la esperan, también debe desenvolverlo, es decir esperan taskFactory.StartNew (FooAsync) .Unwrap; – VoteCoffee

+0

¿Puede agregar un código o referencia para 'LowPriorityTaskScheduler'? – xmedeko

+0

@xmedeko: 'LowPriorityTaskScheduler' es el tipo de operación, no el mío. –

-1

Puede establecer la prioridad de hilo, pero dentro del método de la rosca:

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

Consulta otras valores de ThreadPriority enum.

Cuestiones relacionadas