public override Message Wait(int timeout) { this.timer = new Timer(onTimer, this, timeout, -1); if (Interlocked.CompareExchange(ref this.state, 1, 0) != 0) { // already signaled this.timer.Dispose(); } return null; }