/// <summary> /// Add an action /// </summary> /// <param name="action"></param> /// <param name="name">Queue name or empty string for default</param> /// <returns>True if added, false if the queue is or has been disposed</returns> public bool Add(Func<Task> action, string name = "") { if (disposed || name == null) { return false; } SerialTaskQueueGroup group; lock (this) { if (!taskQueues.TryGetValue(name, out group)) { taskQueues[name] = group = new SerialTaskQueueGroup(); } } if (group.CancelToken.IsCancellationRequested) { return false; } group.Add(action); return true; }
/// <summary> /// Clear all pending operations on task queues /// </summary> /// <param name="name">The queue to clear, empty string for default or null to clear all queues</param> public void Clear(string name = null) { SerialTaskQueueGroup[] groups; lock (this) { if (name == null) { groups = taskQueues.Values.ToArray(); } else if (taskQueues.TryGetValue(name, out SerialTaskQueueGroup _group)) { groups = new SerialTaskQueueGroup[] { _group }; } else { return; } } foreach (SerialTaskQueueGroup group in groups) { group.Clear(); } }