Tengo una aplicación que funciona muy bien para procesar archivos que aterrizan en un directorio en mi servidor. El proceso es:Procesar archivos al mismo tiempo que llegan en C#
1) check for files in a directory
2) queue a user work item to handle each file in the background
3) wait until all workers have completed
4) goto 1
Esto funciona muy bien y nunca se preocupan por el mismo archivo que se está procesando dos o varios hilos que se dio lugar para el mismo archivo. Sin embargo, si hay un archivo que lleva demasiado tiempo procesar, el paso 3 se cuelga en ese archivo y contiene todo el otro procesamiento.
Así que mi pregunta es, ¿cuál es el paradigma correcto para engendrar exactamente un hilo por cada archivo que necesito procesar, sin bloquear si un archivo tarda demasiado? Consideré FileSystemWatcher, pero es posible que los archivos no se puedan leer de inmediato, por lo que continuamente miro todos los archivos y genero un proceso para cada uno (que se cerrará inmediatamente si el archivo está bloqueado).
¿Debo eliminar el paso n. ° 3 y mantener una lista de archivos que ya he procesado? Eso parece desordenado y la lista crecerá mucho con el tiempo, así que sospecho que hay una solución más elegante.
¿Qué sucede con un archivo después de que se procesa? ¿permanece en el mismo directorio? eliminado? ¿movido? Además, ¿están los archivos volcados en el directorio del servidor de forma consistente con la misma extensión? – gangelo
No entiendo cómo su proceso, como se menciona anteriormente, impide que los archivos se procesen dos veces. –
Después de procesar un archivo, se elimina en el paso n. ° 2, por lo que una vez completado el paso n. ° 3, todos los archivos de la carpeta se procesarán y no se han procesado previamente. – powlette