¿La biblioteca de tareas en paralelo tiene algo que se considere un reemplazo o mejora sobre la clase BackgroundWorker?
Tengo una aplicación WinForms con una interfaz de usuario de estilo asistente y realiza algunas tareas de larga duración. Quiero poder tener una interfaz de usuario receptiva con la barra de progreso estándar y la capacidad de cancelar la operación. He hecho esto antes con BackgroundWorker, pero me pregunto si hay algunos patrones TPL que se puedan usar en su lugar.

Respuestas:
La
Taskclase es una mejora sobre laBackgroundWorker; naturalmente, admite la anidación (tareas principales / secundarias), utiliza la nueva API de cancelación, continuación de tareas, etc.Tengo un ejemplo en mi blog , que muestra la
BackgroundWorkerforma antigua de hacer las cosas y la nuevaTaskforma de hacer las cosas. Tengo una pequeña clase de ayuda para las tareas que necesitan informar el progreso, porque encuentro la sintaxis bastante incómoda. El ejemplo cubre los valores de los resultados, las condiciones de error, la cancelación y los informes de progreso.fuente
BackgroundWorkertiene informes de progreso más fáciles, mientras queTaskpermite anidar. De los dos, prefieroTask(es mucho más fácil limpiar los informes de progreso que permitir el anidamiento). Sin embargo, ambos están a años luz de otras soluciones comunes. Me estremezco cuando escucho que la gente usaThreadoThreadPool.QueueUserWorkItem. Son los más difíciles de usar correctamente para tareas en segundo plano.userState. Sin embargo, en los 2.5 años transcurridos desde mi último comentario,Taskse ha complementado conIProgress<T>yProgress<T>, que son más limpios y fáciles queBackgroundWorkerel progreso. En el código moderno, ya no hay ninguna razón para usarloBackgroundWorker.El trabajador en segundo plano sigue siendo una forma válida de lograr esto: si está ejecutando múltiples operaciones grandes al mismo tiempo, valdría la pena considerar las extensiones paralelas, si es solo una, entonces me quedaría con el trabajador en segundo plano.
fuente