C#.NET 4.0 の使用
私の会社のアプリケーションでは、リソース ロッカーを使用して、レコードが同時に編集されないようにしています。データベースを使用して、ロックの開始時刻とロックを取得したユーザーを保存します。これは、たまたまデストラクタから呼び出される、リソース ロッカーでの dispose の次の (奇妙な?) 実装につながりました。
protected virtual void Dispose(bool disposing)
{
lock (this)
{
if (lockid.HasValue)
{
this.RefreshDataButtonAction = null;
this.ReadOnlyButtonAction = null;
try
{
**Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("@lockID", lockid.Value);
parameters.Add("@readsToDelete", null);
Object returnObject = dbio2.ExecuteScalar("usp_DeleteResourceLockReads", parameters);**
lockid = null;
}
catch (Exception ex)
{
Logger.WriteError("ResourceLockingController", "DeleteResourceLocks", ex);
}
finally
{
((IDisposable)_staleResourcesForm).Dispose();
_staleResourcesForm = null;
}
}
}
}
データベース呼び出しからの奇妙な「ハンドルが初期化されていません」という例外をログに記録しているため、太字のセクションが心配です。Finalize() 中に新しいオブジェクトを作成するのは安全ではないことを他の場所で読みましたが、同じルールが dispose() に適用されますか? Dispose() 中に新しいオブジェクトを作成することに伴う副作用はありますか?