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; } }