使用 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() 期间创建新对象是否有任何可能的副作用?