public void Send(T data) { MicroThread t = MicroThread.CurrentThread; m_dataQueue.Enqueue(data); if (m_receivers.Count == 0) { m_senders.Enqueue(t); t.Wait(); } else { MicroThread receiver = m_receivers.Dequeue(); receiver.WakeUp(); t.Yield(); } }