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();
        }