Como un ejercicio de curiosidad más que nada, considere la siguiente clase simple de registro:.NET 2.0: File.AppendAllText (...) - Hilo de aplicación segura
internal static class Logging
{
private static object threadlock;
static Logging()
{
threadlock = new object();
}
internal static void WriteLog(string message)
{
try
{
lock (threadlock)
{
File.AppendAllText(@"C:\logfile.log", message);
}
}
catch
{
...handle logging errors...
}
}
}
¿Está la necesidad lock
alrededor File.AppendAllText(...)
o es el método intrínsecamente seguro para subprocesos mediante su propia implementación?
Buscando información sobre esto produce mucha información contradictoria, algunos dicen que sí, algunos dicen que no. MSDN no dice nada.
Esto es contradictorio. Si File.AppendAllText tiene un bloqueo de escritura exclusivo, ¿por qué necesita un bloqueo por separado? – iheanyi
No entendió, es el archivo que está bloqueado para escritura. Entonces, cualquier otro hilo que intente escribir al mismo tiempo recibirá una excepción. Para evitar eso, debe serializar las escrituras usando un bloqueo en su programa. – Pradeep
no pierda su base de datos de recursos preciosos para el registro si está utilizando una base de datos relacional pesada de lo contrario si está utilizando una base de datos NoSQL Lite, entonces no es malo para iniciar la sesión en la base de datos. Use algo como el registro de eventos de Windows si desea iniciar sesión localmente, pero no escriba en el sistema de archivos usted mismo. Pero ¿por qué no escribir un nuevo archivo por registro en lugar de agregar si necesita ser seguro y no bloquear? –