いくつかのスレッドコードを書く際に、私はReaderWriterLockSlim
変数への同期アクセスを処理するためにクラスを使用してきました。これを行うと、メソッドとプロパティごとに同じ、try-finallyブロックを常に作成していることに気付きました。
繰り返しを避けてこの動作をカプセル化する機会を見つけて、C#ブロック構文ReaderWriterLockSection
で使用できるロックの薄いラッパーとして使用することを目的としたクラスを作成しました。using
クラスは主に次のとおりです。
public enum ReaderWriterLockType
{
Read,
UpgradeableRead,
Write
}
public class ReaderWriterLockSection : IDisposeable
{
public ReaderWriterLockSection(
ReaderWriterLockSlim lock,
ReaderWriterLockType lockType)
{
// Enter lock.
}
public void UpgradeToWriteLock()
{
// Check lock can be upgraded.
// Enter write lock.
}
public void Dispose()
{
// Exit lock.
}
}
私は次のようにセクションを使用します:
private ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
public void Foo()
{
using(new ReaderWriterLockSection(_lock, ReaderWriterLockType.Read)
{
// Do some reads.
}
}
私には、これは良い考えのように思えます。ロックを解除することを決して忘れないので、コードを読みやすくし、一見より堅牢に見えるようにするものです。
誰かがこのアプローチの問題を見ることができますか?これが悪い考えである理由はありますか?