Articles of tarea paralelo biblioteca

Listar hilo de seguridad

Estoy usando el código a continuación var processed = new List(); Parallel.ForEach(items, item => { processed.Add(SomeProcessingFunc(item)); }); ¿Es seguro el hilo de código anterior? ¿Hay alguna posibilidad de que la lista procesada se corrompa? ¿O debería usar un candado antes de agregar? var processed = new List(); Parallel.ForEach(items, item => { lock(items.SyncRoot) processed.Add(SomeProcessingFunc(item)); }); Gracias.

SynchronizationContext.Current es nulo en Continuación en el hilo principal de la interfaz de usuario

He estado tratando de rastrear el siguiente problema en una aplicación de Winforms: SynchronizationContext.Current es nulo en la continuación de una tarea (es decir, .ContinueWith ) que se ejecuta en el hilo principal (espero que el contexto de sincronización actual sea System.Windows.Forms.WindowsFormsSynchronizationContext ). Aquí está el código de Winforms que demuestra el problema: using System; […]

Opción TaskCreationOptions.LongRunning y ThreadPool

TPL usa los progtwigdores de tareas para coordinar tareas. De acuerdo con el documento oficial , el planificador de tareas predeterminado utiliza el grupo de subprocesos, pero si se presenta la opción TaskCreationOptions.LongRunning , creará un subproceso dedicado para esa tarea (A). Pregunta: A partir de ahora, los documentos de MSDN para Visual Studio 2010 […]

¿Cómo puede SynchronizationContext.Current del hilo principal convertirse en nulo en una aplicación de Windows Forms?

Tengo un problema en mi aplicación: en algún momento, SynchronizationContext.Current pasa a ser nulo para el hilo principal. No puedo reproducir el mismo problema en un proyecto aislado. Mi verdadero proyecto es complejo; mezcla formularios de Windows y WPF y llama a los servicios web de WCF. Hasta donde yo sé, esos son todos los […]

¿Cómo puedo decirle a Moq que devuelva una tarea?

Tengo una interfaz que declara Task DoSomethingAsync(); Estoy usando MoqFramework para mis pruebas: [TestMethod()] public async Task MyAsyncTest() { Mock mock = new Mock(); mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { }); … } Luego en mi prueba ejecuto el código que invoca await DoSomethingAsync() . Y la prueba simplemente falla en esa línea. ¿Qué estoy haciendo […]

Crear una tarea completa

Quiero crear una Task completa (no Task ). ¿Hay algo incorporado en .NET para hacer esto? Una pregunta relacionada: crea una tarea completada

¿Cómo manejar todas las excepciones no controladas al usar Task Parallel Library?

Estoy usando TPL ( Task Parallel Library ) en .NET 4.0. Quiero centralizar la lógica de manejo de todas las excepciones no controladas mediante el uso del Thread.GetDomain().UnhandledException . Sin embargo, en mi aplicación, el evento nunca se Task.Factory.StartNew(…) para los hilos iniciados con el código TPL, por ejemplo Task.Factory.StartNew(…) . El evento se dispara […]

Ejecutando tareas en paralelo

Ok, básicamente tengo un montón de tareas (10) y quiero comenzarlas todas al mismo tiempo y esperar a que se completen. Cuando esté terminado, quiero ejecutar otras tareas. Leí un montón de recursos sobre esto, pero no puedo hacerlo bien para mi caso particular … Esto es lo que tengo actualmente (el código se ha […]

¿Task.Run se considera una mala práctica en una aplicación web ASP .NET MVC?

Fondo Actualmente estamos desarrollando una aplicación web, que se basa en ASP .NET MVC 5, Angular.JS 1.4, Web API 2 y Entity Framework 6. Por razones de escalabilidad, la aplicación web heavility se basa en el patrón async / await. Nuestro dominio requiere algunos cálculos intensivos de CPU, lo que puede llevar algunos segundos ( […]

El SynchronizationContext actual no se puede usar como TaskScheduler

Estoy usando tareas para ejecutar llamadas de servidor en ejecución larga en mi ViewModel y los resultados se TaskScheduler.FromSyncronizationContext() en Dispatcher usando TaskScheduler.FromSyncronizationContext() . Por ejemplo: var context = TaskScheduler.FromCurrentSynchronizationContext(); this.Message = “Loading…”; Task task = Task.Factory.StartNew(() => { … }) .ContinueWith(x => this.Message = “Completed” , context); Esto funciona bien cuando ejecuto la aplicación. […]