public ISocket AwaitSocket(TimeSpan timeout) { var handle = new WaitHandle(); lock(_syncroot) { _queue.Enqueue(handle); } handle.Wait(timeout); lock(_syncroot) { return handle.Socket; } }