Programación paralela en C #
Estoy interesado en aprender sobre la programación paralela en C # .NET (no como todo lo que hay que saber, pero lo básico y quizás algunas buenas prácticas), por lo tanto, he decidido reprogramar un viejo programa mío que se llama ImageSyncer. ImageSyncer es un programa realmente simple, todo lo que hace es escanear a través de una carpeta y encontrar todos los archivos que terminan en .jpg, luego calcula la nueva posición de los archivos en función de la fecha en que se tomaron (análisis de datos xif, o lo que sea se llama). Una vez que se ha generado una ubicación, el programa busca los archivos existentes en esa ubicación y, si existe, examina el último tiempo de escritura tanto del archivo para copiar como del archivo "en su camino". Si son iguales, se omite el archivo. Si no es así, se crea una suma de comprobación md5 de ambos archivos. Si no hay coincidencia, el archivo que se copiará recibe una nueva ubicación para copiar (por ejemplo, si se copiara a "C: \ test.jpg", se copia a "C: \ test (1). jpg "en su lugar). El resultado de esta operación se completa en una cola de un tipo de estructura que contiene dos cadenas, el archivo original y la posición para copiarlo. Luego, la cola se repite hasta que esté vacía y los archivos se copien.
En otras palabras, hay 4 operaciones:
1. Scan directory for jpegs
2. Parse files for xif and generate copy-location
3. Check for file existence and if needed generate new path
4. Copy files
Entonces, quiero reescribir este programa para hacerlo paralelo y poder realizar varias operaciones al mismo tiempo, y me preguntaba cuál sería la mejor manera de lograrlo. Se me ocurrieron dos modelos diferentes en los que puedo pensar, pero ninguno de ellos podría ser bueno en absoluto. El primero es paralelizar los 4 pasos del programa anterior, de modo que cuando se ejecute el paso uno se realice en varios subprocesos, y cuando se complete todo el paso 1, se iniciará el paso 2. El otro (que me parece más interesante porque no tengo idea de cómo hacerlo) es crear una especie de modelo de trabajador y consumidor, por lo que cuando un hilo termina con el paso 1, otro toma el control y realiza el paso 2 en ese momento objeto (o algo así). Pero como dije, no sé si alguna de estas son buenas soluciones. Además, no sé mucho sobre programación paralela en absoluto. Sé cómo hacer un hilo y cómo hacer que realice una función tomando un objeto como su único parámetro, y también he usado la clase BackgroundWorker en una ocasión, pero no estoy tan familiarizado con ninguno de ellos. .
Cualquier aportación sería apreciada.