public virtual bool Signal(IQueuedSync sync) { lock (this) { var signalled = _waiting; if (signalled) { _waiting = false; Monitor.Pulse(this); sync.TakeOver(this); } return signalled; } }