Я использую log4net в классе с несколькими потоками, и у меня был простой вопрос. Нужно ли вводить readlock/writelock при проверке свойств и методов вызова в интерфейсе log4net.ILog?Общий интерфейс и ReaderWriterLockSlim
Я использую предложенный метод из примеров Log4Net так наверху упомянутого класса у меня есть:
Private Shared ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger(decType)
И поскольку класс включает в себя несколько потоков, взаимодействующих с ним, у меня есть ReaderWriterLockSlim
экземпляр, который я использую чтобы я не попадал в какие-либо условия гонки с моими переменными. Таким образом, чтобы резюмировать, если я хочу, чтобы убедиться, что я практикующий безопасный многопоточность мне нужно сделать что-то вроде этого:
If Me.ReaderWriterLockSlim.TryEnterUpgradableReadLock(-1) Then
If log.IsWarnEnabled Then
If Me.ReaderWriterLockSlim.TryEnterWriteLock(-1) Then
log.Warn("Log Message Here")
Me.ReaderWriterLockSlim.ExitWriteLock()
End If
End If
Me.ReaderWriterLockSlim.ExitUpgradeableReadLock()
End If
Или, я могу просто сделать это:
If log.IsWarnEnabled Then log.Warn("Log Message Here")
P.S. Да, это грубый псевдокод, у меня на самом деле нет экземпляра ReaderWriterLockSlim
, который называется «ReaderWriterLockSlim».
Спасибо за редактирование Стивен, я делал много работы в последнее время. О, и потому что я не могу сопротивляться: «Судо сделать [steven] sandwhich». –