private void InternalSendingQueueEnqueue(TPacket[] packets, PacketSentCallback <TPacket[]> callback, AbortionChecker abortionChecker) { var segList = packets .SelectMany(packet => _dataPacker.GetByteSegments(packet, _byteSegmentLocator, _sendEventArgs.Buffer.Length)) .ToList(); AsyncCallback cb; if (callback == null) { cb = null; } else { cb = _ => callback(packets); } _sendingQueue.Enqueue( new Tuple <Queue <ArraySegment <byte> >, AsyncCallback, AbortionChecker>(new Queue <ArraySegment <byte> >(segList), cb, abortionChecker)); StartSendingIfNoOneIsSending(); }