私は、すべてのDBロジック(読み取りと書き込み)が次のように囲まれているプロジェクトに取り組んでいます。
using(Util.DbRun ()) {
// Code here
}
そして、私はこのDbRunメソッドを調べて、これを見つけました:
static readonly object dbWait = new object();
static public IDisposable DbRun ()
{
Monitor.Enter (dbWait);
return new Disposable (() => Monitor.Exit(dbWait));
}
class Disposable : IDisposable
{
private Action action;
private volatile bool disposed = false;
public Disposable (Action action)
{
if (action == null)
throw new ArgumentNullException ("action can't be null");
this.action = action;
}
#region IDisposable implementation
public void Dispose ()
{
bool run = false;
if (!disposed) {
lock (this) {
if (!disposed) {
run = true;
disposed = true;
}
}
}
if (run)
action ();
}
#endregion
}
そして私の質問は; それは一般的な構成とどのように比較さlock { /* code here */ }
れますか?