public override void Dispose()
{
if (_isDisposed)
{
return;
}
bool thisLockTaken = false;
bool sessionHandleLockTaken = false;
try
{
TakeLocks(ref thisLockTaken, ref sessionHandleLockTaken);
if (_isDisposed)
{
return;
}
if (!IsStateTerminal(State))
{
Abort();
}
else
{
CleanUp();
}
_isDisposed = true;
}
finally
{
ReleaseLocks(ref thisLockTaken, ref sessionHandleLockTaken);
}
}