Articles of task parallel library

¿Por qué TaskScheduler.Current es TaskScheduler por defecto?

La Biblioteca paralela de tareas es excelente y la he usado mucho en los últimos meses. Sin embargo, hay algo que realmente me molesta: el hecho de que TaskScheduler.Current es el planificador de tareas predeterminado, no TaskScheduler.Default . Esto no es del todo obvio a primera vista en la documentación ni en las muestras. Current […]

¿Cuál es la diferencia entre Task.Run () y Task.Factory.StartNew ()

Tengo un método: private static void Method() { Console.WriteLine(“Method() started”); for (var i = 0; i < 20; i++) { Console.WriteLine("Method() Counter = " + i); Thread.Sleep(500); } Console.WriteLine("Method() finished"); } Y quiero comenzar este método en una nueva Tarea. Puedo comenzar una nueva tarea como esta var task = Task.Factory.StartNew(new Action(Method)); o esto var […]

¿Cuál es la forma correcta de cancelar una operación asincrónica que no acepta un CancelToken?

¿Cuál es la forma correcta de cancelar lo siguiente? var tcpListener = new TcpListener(connection); tcpListener.Start(); var client = await tcpListener.AcceptTcpClientAsync(); Simplemente llamando a tcpListener.Stop() parece dar como resultado una ObjectDisposedException y el método AcceptTcpClientAsync no acepta una estructura CancellationToken . ¿Me estoy perdiendo algo obvio?

Revisando Task.ConfigureAwait (continueOnCapturedContext: false)

Demasiado tiempo para leer. El uso de Task.ConfigureAwait(continueOnCapturedContext: false) puede estar introduciendo una conmutación redundante de subprocesos. Estoy buscando una solución consistente para eso. Versión larga. El principal objective de diseño detrás de ConfigureAwait(false) es reducir las repeticiones de llamada de continuación redundantes de SynchronizationContext.Post para await , siempre que sea posible. Esto generalmente significa […]

Un patrón para auto-cancelar y reiniciar la tarea

¿Existe un patrón establecido recomendado para tareas de cancelación automática y reinicio? Por ejemplo, estoy trabajando en la API para el corrector ortográfico de fondo. La sesión de revisión ortográfica se envuelve como Task . Cada sesión nueva debe cancelar la anterior y esperar su finalización (para volver a utilizar correctamente los recursos como el […]

¿Cuándo deshacerse de CancellationTokenSource?

La clase CancellationTokenSource es desechable. Un vistazo rápido en Reflector demuestra el uso de KernelEvent , un KernelEvent (muy probable) no administrado. Dado que CancellationTokenSource no tiene un finalizador, si no lo eliminamos, el GC no lo hará. Por otro lado, si observa los ejemplos enumerados en la cancelación de artículos de MSDN en hilos […]

La forma más simple de hacer un fuego y olvidar el método en c # 4.0

Me gusta mucho esta pregunta: ¿La forma más simple de hacer fuego y olvidar el método en C #? Solo quiero saber que ahora que tenemos extensiones paralelas en C # 4.0 ¿hay alguna manera mejor y más limpia de Fire & Forget con Parallel linq?

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 […]