Я пишу глобальный обработчик ошибок / регистратор для приложений, работающих в Windows Azure. Когда в приложении возникает ошибка, выполняется ряд операций, которые должны выполняться атомарно. Мне нужно, чтобы ошибка не регистрировалась, пока предыдущая не будет завершена. Между тем, я хочу, чтобы чтения журналов происходили по мере необходимости.
Моя первоначальная мысль заключалась в использовании монитора / блокировки и блокировки только записей об ошибках. Таким образом, чтение вообще не блокируется. Мне было интересно, хотя будет ли более подходящим ReaderWriterLockSlim. Я не могу сказать, что действительно понимаю значение между одним подходом и другим.
Должен ли я создать ReaderWriterLockSlim и сделать что-то вроде следующего ниже (с чтениями, заключенными в EnterReadLock) ...
public static void LogError(Exception exception)
{
_lock.EnterWriteLock();
...
_lock.ExitWriteLock();
}
Или я просто делаю что-то вроде следующего, блокируя только секции записи:
public static void LogError(Exception exception)
{
lock (someStaticLock)
{
...
}
}
Любые мысли / советы будут высоко оценены.