コード例 #1
0
ファイル: IPBanService.cs プロジェクト: wushian/IPBan
 /// <summary>
 /// Run a task on the firewall queue
 /// </summary>
 /// <param name="action">Action to run</param>
 /// <param name="queueName">Queue name</param>
 public void RunFirewallTask(Func <CancellationToken, Task> action, string queueName = null)
 {
     if (MultiThreaded)
     {
         if (!CancelToken.IsCancellationRequested)
         {
             queueName = (string.IsNullOrWhiteSpace(queueName) ? "Default" : queueName);
             AsyncQueue <Func <CancellationToken, Task> > queue;
             lock (firewallQueue)
             {
                 if (!firewallQueue.TryGetValue(queueName, out queue))
                 {
                     firewallQueue[queueName] = queue = new AsyncQueue <Func <CancellationToken, Task> >();
                     Task.Run(async() =>
                     {
                         try
                         {
                             await FirewallTask(queue);
                         }
                         catch (Exception ex)
                         {
                             if (!(ex is OperationCanceledException))
                             {
                                 Logger.Error(ex);
                             }
                         }
                     });
                 }
             }
             queue.Enqueue(action);
         }
     }
     else
     {
         action.Invoke(CancelToken).Sync();
     }
 }
コード例 #2
0
ファイル: IPBanService.cs プロジェクト: ultranijia/IPBan
 /// <summary>
 /// Run a task on the firewall queue
 /// </summary>
 /// <param name="action">Action to run</param>
 /// <param name="queueName">Queue name</param>
 public void RunFirewallTask(Func <CancellationToken, Task> action, string queueName)
 {
     if (MultiThreaded)
     {
         if (!serviceCancelTokenSource.IsCancellationRequested)
         {
             queueName = (string.IsNullOrWhiteSpace(queueName) ? "Default" : queueName);
             AsyncQueue <Func <CancellationToken, Task> > queue;
             lock (firewallQueue)
             {
                 if (!firewallQueue.TryGetValue(queueName, out queue))
                 {
                     firewallQueue[queueName] = queue = new AsyncQueue <Func <CancellationToken, Task> >();
                     Task.Run(() => FirewallTask(queue));
                 }
             }
             queue.Enqueue(action);
         }
     }
     else
     {
         action.Invoke(serviceCancelTokenSource.Token).Sync();
     }
 }