C# 使用(IDisposable)vs.class字段-正确使用ReaderWriterLockSlim

C# 使用(IDisposable)vs.class字段-正确使用ReaderWriterLockSlim,c#,using-statement,readerwriterlockslim,C#,Using Statement,Readerwriterlockslim,在将由不同线程使用的FileWriter类中,我当前使用ReaderWriterLockSlim来防止两个线程同时尝试写入文件时出现错误,如下所示: (1) 公共类文件编写器 { 私有ReaderWriterLockSlim readerWriterLock=新的ReaderWriterLockSlim(); 公共无效写入文件(字符串消息) { 尝试 { 这是.readerWriterLock.EnterWriteLock(); //写作发生在这里 } 最后 { this.readerWrite

在将由不同线程使用的
FileWriter
类中,我当前使用
ReaderWriterLockSlim
来防止两个线程同时尝试写入文件时出现错误,如下所示:

(1)
公共类文件编写器
{
私有ReaderWriterLockSlim readerWriterLock=新的ReaderWriterLockSlim();
公共无效写入文件(字符串消息)
{
尝试
{
这是.readerWriterLock.EnterWriteLock();
//写作发生在这里
}
最后
{
this.readerWriterLockSlim.ExitWriteLock();
}
}
}
哪个有效。但是在那之后,我读到了
ReaderWriterLockSlim
实现了
IDisposable
,所以我想知道

(2)
公共类文件编写器
{
公共无效写入文件(字符串消息)
{
使用(ReaderWriterLockSlim ReaderWriterLockSlim=new ReaderWriterLockSlim())
{
readerWriterLockSlim.EnterWriteLock();
//写作发生在这里
readerWriterLockSlim.ExitWriteLock();
}
}
}
是否是“更好”的方法,以及它是否会引入一些新的缺点。我的直觉告诉我,我可能不应该每次调用该方法时都创建一个新的
ReaderWriterLockSlim
,而应该像
(2)
中那样只创建一次

不幸的是,它不起作用(好像我甚至没有用过锁),所以我认为
(2)
不可能是正确的。 但话说回来,如果不是按照
(2)
中的计划使用,为什么
ReaderWriterLockSlim
会实现
IDisposable



ReaderWriterLockSlim的正确用法是什么?

不是每个
IDisposable
都直接用在
using
语句中。另一种模式是,如果您的一个类字段中有一个
IDisposable
(并且您的类“拥有”该object1),那么您的类也应该实现
IDisposable
,并在
Dispose
期间清理其可处置项

您的重写是错误的,这是正确的,因为每个调用方都使用不同的锁对象,因此不会发生排除

见:

在包含一次性类型实例的类型上实现基本Dispose模式。有关基本模式的详细信息,请参见本节



1感谢to对重要警告的评论。如果您不想控制对象的生命周期,则不适合
处理此类对象

允许多个读卡器的FileWriter?有些东西命名不正确。@bommelding right,实际的用例有点复杂,所以我不得不想出一些更符合MVCE的东西。谢谢你的澄清。我甚至不知道类具有
IDisposable
成员应该自己实现
IDisposable
的部分。我会尽快接受答案,我想指出的是,只有拥有一次性成员的类才应该处理这些资源。依赖注入就是一个例子,在这个例子中,类不应该处理一次性成员。