public bool Release()
{
lock (_syncRoot)
{
if (_released) //If released already (this means we've been interrupted or we timed out!)
return false;
_released = true;
Monitor.Pulse(_syncRoot);
return true;
}
}