¿Cómo puedo obtener un TaskScheduler para un Dispatcher?

Tengo una aplicación con varios Dispatcher s (también conocidos como subprocesos GUI, también conocidos como bombas de mensajes) para asegurar que una parte lenta y sin respuesta de la GUI se ejecute sin afectando demasiado al resto de la aplicación. También utilizo mucho Task .

Actualmente tengo un código que ejecuta condicionalmente una Action en un TaskScheduler o un Dispatcher y luego devuelve una Task ya sea directamente o creando una manualmente usando TaskCompletionSource . Sin embargo, este diseño de personalidad dividida hace que lidiar con cancelaciones, excepciones, etc. sea mucho más complicado de lo que me gustaría. Quiero usar Task s en todas partes y DispatcherOperation s en ninguna parte. Para hacer eso, necesito programar tareas en los despachadores, pero ¿cómo?

¿Cómo puedo obtener un TaskScheduler para cualquier Dispatcher dado?

Editar: Después de la discusión a continuación, me decidí por la siguiente implementación:

public static Task<TaskScheduler> GetScheduler(Dispatcher d) {
    var schedulerResult = new TaskCompletionSource<TaskScheduler>();
    d.BeginInvoke(() => 
        schedulerResult.SetResult(
            TaskScheduler.FromCurrentSynchronizationContext()));
    return schedulerResult.Task;
}
17
задан Eamon Nerbonne 23 June 2011 в 05:57
поделиться