TPL Dataflow vs Semaphore simple
Tengo el requisito de hacer un proceso escalable. El proceso tiene principalmente operaciones de E / S con algunas operaciones menores de CPU (principalmente cadenas de deserialización). El proceso consulta la base de datos para obtener una lista de direcciones URL, luego obtiene datos de estas direcciones URL, deseriliza los datos descargados en objetos, luego persiste algunos de los datos en dinámica de crm y también en otra base de datos. Luego necesito actualizar la primera base de datos que se procesaron las URL. Parte del requisito es hacer que el grado de paralelismo sea configurable.
Inicialmente pensé implementarlo a través de una secuencia de tareas con esperar y limitar el paralelismo usando Semaphore, bastante simple. Luego leí algunas publicaciones y respuestas aquí de @Stephen Cleary que recomienda usar TPL Dataflow y pensé que podría ser un buen candidato. Sin embargo, quiero asegurarme de que estoy "complicando" el código usando Dataflow por una causa digna. También recibí una sugerencia para usar unForEachAsync método de extensión que también es fácil de usar, sin embargo, no estoy seguro de si no causará una sobrecarga de memoria debido a la forma en que divide la colección.
¿Es TPL Dataflow una buena opción para tal escenario? ¿Cómo es mejor que un método Semaphore o ForEachAsync? ¿Qué beneficios obtendré realmente si lo implemento a través de TPL DataFlow sobre cada una de las otras opciones (Semaphore / ForEachASync)?