c# - net - ¿Cuándo es útil el System.Threading.Task?
task c# example (1)
Hay dos ventajas principales en el uso de Task
:
-
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 conasync
-await
, que utilizaTask
para operaciones asíncronas. Dado que la operación que obtiene el resultado puede fallar, lasTask
también pueden representar fallas. -
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 laTask
(ContinueWith()
) y también algunos métodos que funcionen en variasTask
(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
:
- Puede usar un
TaskScheduler
personalizado para decidir cuándo y dónde se ejecutará laTask
. Esto puede ser útil, por ejemplo, si desea ejecutar unaTask
en el subproceso de la interfaz de usuario , limitar el grado de paralelismo o tener un Bloqueo de lectores deTask
-escritor . -
Task
apoyo a la cancelación cooperativa a través deCancellationToken
. -
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 laTask
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?