parallel net for example async c# multithreading parallel-processing task-parallel-library task

c# - net - ¿Cuándo es útil el System.Threading.Task?



task c# example (1)

Hay dos ventajas principales en el uso de Task :

  1. Task puede representar cualquier resultado que estará disponible en el futuro (el concepto general no es específico de .Net y se denomina future ), no solo un cálculo. Esto es especialmente importante con async - await , que utiliza Task para operaciones asíncronas. Dado que la operación que obtiene el resultado puede fallar, las Task también pueden representar fallas.
  2. Task tiene muchos métodos para operar en ellos. Puede esperar sincrónicamente hasta que finalice ( Wait() ), espere su resultado ( Result ), configure alguna operación cuando finalice la Task ( ContinueWith() ) y también algunos métodos que funcionen en varias Task ( WaitAll() , WaitAny() , ContinueWhenAll() ). Todo esto es posible utilizando otros métodos de procesamiento paralelo, pero tendría que hacerlo manualmente.

Y también hay algunas ventajas más pequeñas al usar Task :

  1. Puede usar un TaskScheduler personalizado para decidir cuándo y dónde se ejecutará la Task . Esto puede ser útil, por ejemplo, si desea ejecutar una Task en el subproceso de la interfaz de usuario , limitar el grado de paralelismo o tener un Bloqueo de lectores de Task -escritor .
  2. Task apoyo a la cancelación cooperativa a través de CancellationToken .
  3. Task que representan cálculos tienen algunas mejoras de rendimiento. Por ejemplo, utilizan la cola de robo de trabajo para un procesamiento más eficiente y también admiten el ingreso en línea (ejecutando la Task que aún no se ha iniciado en un subproceso que lo espera de forma síncrona).

He utilizado la mayor parte de la biblioteca de subprocesos ampliamente. Estoy bastante familiarizado con la creación de nuevos subprocesos, la creación de BackgroundWorkers y el uso de .NET ThreadPool incorporado (que son geniales).

Sin embargo, nunca he encontrado una razón para usar la clase de Task . He visto tal vez uno o dos ejemplos de personas que los usan, pero los ejemplos no fueron muy claros y no dieron una descripción general de por qué uno debería usar una tarea en lugar de un nuevo hilo.

Pregunta 1: de un nivel alto, ¿cuándo es útil usar una tarea en comparación con uno de los otros métodos para el paralelismo en .NET?

Pregunta 2: ¿Alguien tiene un ejemplo simple y / o de dificultad media que demuestre cómo usar las tareas?