¿Hay alguna forma de eludir o eliminar el bloqueo de archivos que tiene otro subproceso sin eliminar el hilo?¿Es posible omitir un bloqueo de archivo en C# cuando otro subproceso/proceso utiliza un bloqueo exclusivo?
Estoy usando una biblioteca de terceros en mi aplicación que está realizando operaciones de solo lectura en un archivo. Necesito un segundo hilo leer el archivo al mismo tiempo para extraer algunos datos adicionales que la biblioteca de terceros no está exponiendo. Desafortunadamente, la biblioteca de terceros abrió el archivo utilizando un bloqueo de lectura/escritura y, por lo tanto, obtengo el habitual "El proceso no puede acceder al archivo ... porque está siendo utilizado por otro proceso".
Me gustaría evitar la precarga de todo el archivo con mi hilo porque el archivo es grande y causaría demoras no deseadas en la carga de este archivo y el uso excesivo de memoria. Copiar el archivo no es práctico debido al tamaño de los archivos. Durante el funcionamiento normal, dos hilos que golpean el mismo archivo no causarían problemas importantes de contención/rendimiento de E/S. No necesito una sincronización de tiempo perfecta entre los dos hilos, pero necesitan leer los mismos datos en medio segundo de cada uno.
No puedo cambiar la biblioteca de terceros.
¿Hay alguna solución a este problema?
Un candado es un candado - si lo hubiera, no sería un candado ... –
Y al igual que con muchos candados, parece que algunos desarrolladores de bibliotecas no entienden que menos es más. :-) También estaría contento con una solución inteligente. –
Una posibilidad remota: ¿puedes abrir ese archivo como compartido _antes_ de tu biblioteca de terceros? Quizás implementaron algún mecanismo alternativo. –