c# - net - ¿Cuándo es útil el System.Threading.Task?
task c# example (1)
Hay dos ventajas principales en el uso de Task :
-
Taskpuede 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 utilizaTaskpara operaciones asíncronas. Dado que la operación que obtiene el resultado puede fallar, lasTasktambién pueden representar fallas. -
Tasktiene 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
TaskSchedulerpersonalizado para decidir cuándo y dónde se ejecutará laTask. Esto puede ser útil, por ejemplo, si desea ejecutar unaTasken el subproceso de la interfaz de usuario , limitar el grado de paralelismo o tener un Bloqueo de lectores deTask-escritor . -
Taskapoyo a la cancelación cooperativa a través deCancellationToken. -
Taskque 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 laTaskque 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?