【发布时间】:2018-11-18 05:41:16
【问题描述】:
在将由不同线程使用的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 不打算像(2) 那样使用,为什么还要实现IDisposable?
ReaderWriterLockSlim的正确用法是什么?
【问题讨论】:
-
一个允许多个 readers 的 FileWriter ?某些东西的名称不正确。
-
@bommelding 对,实际用例有点复杂,所以我必须想出一些更符合 MVCE 的东西。
标签: c# using-statement readerwriterlockslim