Articles of task parallel library

Crear una Tarea completada

Estoy implementando un método Task StartSomeTask() y conozco el resultado antes de llamar al método. ¿Cómo creo una tarea que ya se haya completado? Esto es lo que estoy haciendo actualmente: private readonly Result theResult = new Result(); public override Task StartSomeTask() { var task = new Task(() => theResult); task.RunSynchronously(CurrentThreadTaskScheduler.CurrentThread); return task; } ¿Hay […]

¿Cómo puedo evitar continuidades sincrónicas en una tarea?

Tengo un código de biblioteca (red de socket) que proporciona una API basada en Task para respuestas pendientes a las solicitudes, en función de TaskCompletionSource . Sin embargo, hay una molestia en el TPL ya que parece imposible evitar las continuas sincrónicas. Lo que me gustaría poder hacer es: decirle a TaskCompletionSource que no debe […]

Si mi interfaz debe devolver Tarea, ¿cuál es la mejor manera de tener una implementación sin operación?

En el siguiente código, debido a la interfaz, la clase LazyBar debe devolver una tarea desde su método (y por razones de argumentos no se puede cambiar). Si la implementación de LazyBar es inusual en el sentido de que se ejecuta de forma rápida y sincrónica, ¿cuál es la mejor manera de devolver una tarea […]

¿Cuál es la diferencia entre devolver el vacío y devolver una Tarea?

Al observar varias muestras de CTP C # Async, veo algunas funciones de sincronización que devuelven el void y otras que devuelven la Task no genérica. Puedo ver por qué devolver una Task es útil para devolver datos a la persona que llama cuando se completa la operación asincrónica, pero las funciones que he visto […]

¿Qué hace MaxDegreeOfParallelism?

Estoy usando Parallel.ForEach y estoy haciendo algunas actualizaciones de bases de datos, ahora sin configurar MaxDegreeOfParallelism, una máquina de procesador de doble núcleo da como resultado tiempos de espera de cliente sql, donde la máquina procesadora de cuatro núcleos de alguna manera no agota el tiempo de espera. Ahora no tengo control sobre qué tipo […]

ConfigureAwait empuja la continuación a un hilo de grupo

Aquí hay un código de WinForms: async void Form1_Load(object sender, EventArgs e) { // on the UI thread Debug.WriteLine(new { where = “before”, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread }); var tcs = new TaskCompletionSource(); this.BeginInvoke(new MethodInvoker(() => tcs.SetResult(true))); await tcs.Task.ContinueWith(t => { // still on the UI thread Debug.WriteLine(new { where = “ContinueWith”, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread }); }, TaskContinuationOptions.ExecuteSynchronously).ConfigureAwait(false); […]

Secuenciación de tareas y reentrada

Tengo el siguiente escenario, que creo que podría ser bastante común: Hay una tarea (un controlador de comandos de UI) que puede completarse de forma sincrónica o asíncrona. Los comandos pueden llegar más rápido de lo que se procesan. Si ya hay una tarea pendiente para un comando, la nueva tarea del controlador de comandos […]

¿Hay un reemplazo basado en tareas para System.Threading.Timer?

Soy nuevo en las tareas de .Net 4.0 y no pude encontrar lo que pensé que sería un reemplazo basado en tareas o la implementación de un temporizador, por ejemplo, una tarea periódica. ¿Hay tal cosa? Actualización Se me ocurrió lo que creo que es una solución a mis necesidades, que consiste en ajustar la […]

UnobservedTaskException es throw pero es manejado por un controlador TaskScheduler.UnobservedTaskException y un controlador de continuación OnlyOnFaulted

Posible duplicado: ¿Cómo manejar todas las excepciones no controladas al usar Task Parallel Library? @Buu Nguyen Hola, la solución se basa en tu idea Alguien lo puso como posible duplicado, aquí hay algo diferente. Le conté sobre esa respuesta y la idea me ayudó aquí. Hay un comentario mío. Tengo problemas con la progtwigción de […]

¿Cómo ejecutar una tarea en el fondo de wpf mientras se puede proporcionar un informe y permitir la cancelación?

Quiero ejecutar una tarea de ejecución larga después de hacer clic en un botón wpf. Aquí lo que hice. private void Start(object sender, RoutedEventArgs e) { for (int i = 0; i < 10; i++) { Thread.Sleep(2000); // simulate task } } El problema es que esto hará que wpf gui no responda. También me […]