Articles of task parallel library

Diferencia entre regresar y esperar una Tarea en un método asíncrono

¿Hay alguna diferencia entre los métodos a continuación? ¿Es preferible uno sobre el otro? public static async Task SendAsync1(string to, string subject, string htmlBody) { // … await smtp.SendMailAsync(message); // No return statement } public static Task SendAsync2(string to, string subject, string htmlBody) { // … return smtp.SendMailAsync(message); } Este método será llamado desde los […]

Cola de proceso con subprocesamiento múltiple o tareas

Tengo una aplicación de mensajes de telefonía en la que hay muchos mensajes que procesar. Debido a que los puertos del teléfono son limitados, el mensaje se procesará primero en primer lugar. Cada mensaje tiene un indicador ‘Confirmar’ que indica el que se procesa. Fue inicializado como falso por supuesto. Quiero poner todos los mensajes […]

AspNetSynchronizationContext y espera continuidades en ASP.NET

Observé un inesperado (y yo diría, un redundante) cambio de hilo después de await dentro del método asincrónico del controlador de API Web ASP.NET. Por ejemplo, a continuación, esperaría ver el mismo ManagedThreadId en las ubicaciones n. ° 2 y n. ° 3, pero la mayoría de las veces veo un hilo diferente en n. […]

Acceder a los controles de UI en Task.Run con async / await en WinForms

Tengo el siguiente código en una aplicación de WinForms con un botón y una etiqueta: using System; using System.IO; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private async void button1_Click(object sender, EventArgs e) { await Run(); } private async Task Run() { await […]

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