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