Estoy leyendo sobre Tasks se ha preferido la manera de hacer la programación asincrónica con 4.0. Me pregunto si hay casos de uso donde el uso de tareas no deba preferirse a los hilos de C# normales.¿Hay algún escenario donde las Tareas no se deberían usar?
Respuesta
Desde Task
s utilizan el subyacente ThreadPool
(a menos marcado como carreras de larga), que es una mala idea usarlas siempre que use un ThreadPool
no se recomienda, por ejemplo,
- operaciones de E/S largas que obstruyen la cola de tareas y evitan que se ejecuten otras tareas.
- realizando operaciones que requieren la identidad de subprocesos como la configuración de afinidad.
Esto se ha ido en detalles aquí: Should I notice a difference in using Task vs Threads in .Net 4.0?
Esta diferencia más grande es que el TaskFactory utiliza conjunto de hilos, por lo que si usted tiene un montón de tareas que no se inicie inmediatamente. Deben esperar a que se ejecute un hilo gratis. En la mayoría de los casos esto es aceptable.
Los hilos se ejecutarán instantáneamente tan pronto como se llame a .Start(), si el hardware lo permite.
Suponiendo que la agrupación de subprocesos está bien, las tareas ofrecen muchos beneficios, incluyendo la cancelación, ContinueWith, OnSuccess, OnError, Exception aggregation y WaitAll, por nombrar algunos de los más importantes.
Los hilos estarán listos instantáneamente tan pronto como se llame .Start(). Se ejecutarán cuando haya un núcleo disponible, que a menudo es 'instantáneo'. –
Buen punto, debo aclarar que los hilos son hardware limitado mientras que las tareas son software limitado. – Dharun
Gracias Dharun. La publicación del blog parece tener una buena comparación de varios enfoques también. http://nitoprograms.blogspot.ca/2010/08/various-implementations-of-asynchronous.html – imak
- 1. ¿Hay algún complemento que permita cargar/usar dependencias no Maven?
- 2. ¿Hay algún beneficio real de usar J #?
- 3. ¿Hay algún problema con "usar diagnósticos"?
- 4. ¿Hay algún tutorial/guía para usar Firebug?
- 5. Rake Las tareas de RSpec no aparecen
- 6. ¿Hay algún Treebank gratis?
- 7. ¿Se deberían usar contratos de código para la seguridad?
- 8. ¿Se deberían usar los métodos parseJSON/getJSON de jQuery?
- 9. ¿Cuán "separadas" deberían ser las vistas?
- 10. ¿No deberían las importaciones ser absolutas por defecto en python27?
- 11. ¿Hay algún costo por usar el servicio de notificación push?
- 12. ¿Deberían las entidades implementar interfaces?
- 13. ¿Dónde deberían colocarse las funciones Symfony "globales"?
- 14. ¿Qué significa "donde T: algún valor" significa?
- 15. ¿Hay algún embellecedor CoffeeScript?
- 16. ¿Hay algún beneficio al usar SecureString en ASP.NET?
- 17. ¿Hay algún beneficio de usar un método @static?
- 18. ¿Hay algún punto de usar "return! 0" en javascript?
- 19. ¿Deberían especificarse las tareas cron de linux con un "&" para indicar que se ejecutan en segundo plano?
- 20. ¿Hay un "error de método" para las tareas de rake?
- 21. Usar las tareas de la comunidad msbuild sin instalar
- 22. ¿Hay algún caso de uso donde la evaluación de cadena sea necesaria en Perl?
- 23. ¿Hay algún inconveniente obvio para usar un intercambio sin asignación?
- 24. donde se encuentra gacutil.exe?
- 25. ¿No deberían las declaraciones preparadas ser mucho más rápidas?
- 26. ¿Hay algún beneficio al usar HtmlHelper en MVC?
- 27. Donde usar wsgen?
- 28. ¿Por qué las imágenes se centran verticalmente con `line-height` posicionado 2 píxeles debajo de donde deberían estar?
- 29. ¿Hay algún beneficio de usar un Inicializador de objetos?
- 30. ¿Cuán indulgente deberían ser las entradas?
La afinidad de subprocesos es un punto muy bueno, aunque rara vez aparece. –
+1 por mencionar IO de larga ejecución. –
Recomiendo seguir usando tareas para operaciones de larga duración, siempre que las marque LongRunning. –