public void ReceiveAsync(Action<ITcpConnection, IEnumerable<ArraySegment<byte>>> callback)
{
if (callback == null)
throw new ArgumentNullException("callback");
lock (_receivingLock)
{
if (_receiveCallback != null)
throw new InvalidOperationException("ReceiveAsync called again while previous call wasn't fulfilled");
_receiveCallback = callback;
}
TryDequeueReceivedData();
}