public virtual async void  StartQueues(IEnumerable <MessageQueue> topicQueues, Func <MessageQueue, bool> canInvoke, Action <QueueMessage> whenInvoke)
 {
     if (canInvoke == null)
     {
         return;
     }
     if (whenInvoke == null)
     {
         return;
     }
     if (topicQueues == null || topicQueues.All(x => x.QueueStatus == QueueStatus.wroking))
     {
         return;
     }
     foreach (var queue in topicQueues)
     {
         if (queue.QueueStatus == QueueStatus.stop)
         {
             queue.SetQueueStatus(QueueStatus.wroking);
             await QueueProcessor.ProcessQueueAsync(
                 queue,
                 () =>
             {
                 return(canInvoke(queue));
             },
                 (queueMessage) =>
             {
                 whenInvoke(queueMessage);
             }
                 );
         }
     }
 }