public void Register(IMessageFrameWriter messageFrameWriter)
        {
            if (messageFrameWriter == null) throw new ArgumentNullException("messageFrameWriter");

            var messageQueuePayload = new MessageFrameWriterPayload(messageFrameWriter);
            if (_messageFrameWriters.TryAdd(messageFrameWriter, messageQueuePayload))
            {
                _messageWritersQueueForRoundRobin.Enqueue(messageQueuePayload);
            }

            StartAsyncProcessingIfNotStartedYet();
        }
 private async Task LoopMessageQueueAsync(MessageFrameWriterPayload messageFrameWriterPayload, CancellationToken cancellationToken, Action finalAction = null)
 {
     try
     {
         await _messageQueue.SendFromQueueAsync(messageFrameWriterPayload.Writer, cancellationToken);
     }
     finally
     {
         messageFrameWriterPayload.Busy.Set(false);
         if (finalAction != null)
         {
             finalAction();
         }
     }
 }
        public void Register(IMessageFrameWriter messageFrameWriter)
        {
            if (messageFrameWriter == null)
            {
                throw new ArgumentNullException("messageFrameWriter");
            }

            var messageQueuePayload = new MessageFrameWriterPayload(messageFrameWriter);

            if (_messageFrameWriters.TryAdd(messageFrameWriter, messageQueuePayload))
            {
                _messageWritersQueueForRoundRobin.Enqueue(messageQueuePayload);
            }

            StartAsyncProcessingIfNotStartedYet();
        }
 private async Task LoopMessageQueueAsync(MessageFrameWriterPayload messageFrameWriterPayload, CancellationToken cancellationToken, Action finalAction = null)
 {
     try
     {
         await _messageQueue.SendFromQueueAsync(messageFrameWriterPayload.Writer, cancellationToken);
     }
     finally
     {
         messageFrameWriterPayload.Busy.Set(false);
         if (finalAction != null) finalAction();
     }
 }