В классе FileWriter
, который будет использоваться разными потоками, в настоящее время я использую ReaderWriterLockSlim
, чтобы предотвратить ошибки, возникающие, когда два потока пытаются записать в файл одновременно, как это:
(1)
public class FileWriter
{
private ReaderWriterLockSlim readerWriterLock = new ReaderWriterLockSlim();
public void WriteToFile(string message)
{
try
{
this.readerWriterLock.EnterWriteLock();
// the writing happens here
}
finally
{
this.readerWriterLockSlim.ExitWriteLock();
}
}
}
который работает .Но после этого я прочитал, что ReaderWriterLockSlim
реализует IDisposable
, и поэтому мне стало интересно, будет ли
(2)
public class FileWriter
{
public void WriteToFile(string message)
{
using (ReaderWriterLockSlim readerWriterLockSlim = new ReaderWriterLockSlim())
{
readerWriterLockSlim.EnterWriteLock();
// the writing happens here
readerWriterLockSlim.ExitWriteLock();
}
}
}
"лучшим" подходом, и может ли он внести некоторые новые недостатки ,Мои интуитивные ощущения говорят мне, что Я, вероятно, не должен создавать новый ReaderWriterLockSlim
каждый раз, когда метод вызывается, а только один раз, как в (2)
.
К сожалению, это не работает (как будто я даже не использовал блокировку), и поэтому я решил, что (2)
не может быть правильным.Но опять же, зачем ReaderWriterLockSlim
реализовывать IDisposable
, если его не планируется использовать, как в (2)
?
Как правильно использовать ReaderWriterLockSlim
?