public void Task_Should_Be_Cancelled(IEnumerable <IPandaTask> tasks, CancellationStrategy cancellationStrategy, Type exceptionType) { var task = new WhenAllPandaTask(tasks, cancellationStrategy); Assert.AreEqual(PandaTaskStatus.Rejected, task.Status); Assert.That(task.Error, Is.InstanceOf(exceptionType)); }
internal WhenAllPandaTask(IEnumerable <IPandaTask> tasksCollection, CancellationStrategy strategy) { //check-set _strategy = strategy; if (tasksCollection == null) { throw new ArgumentNullException(nameof(tasksCollection)); } //To protect for first complete task. _waitingCount = 1; _allFailed = true; foreach (IPandaTask task in tasksCollection) { if (task == null) { throw new ArgumentException(@"One of the tasks is null", nameof(tasksCollection)); } _waitingCount++; switch (task.Status) { case PandaTaskStatus.Pending: task.Done(CompleteSuccess).Fail(CompleteWithError); break; case PandaTaskStatus.Rejected: CompleteWithError(task.Error); break; case PandaTaskStatus.Resolved: CompleteSuccess(); break; } } CheckCompletion(); }
/// <summary> /// Creates task for waiting all tasks. /// </summary> /// <param name="strategy">strategy for TaskCanceledException`s aggregation</param> /// <param name="tasks">task`s collection</param> public static PandaTask WaitAll(CancellationStrategy strategy, IEnumerable <IPandaTask> tasks) { return(new WhenAllPandaTask(tasks, strategy)); }
/// <summary> /// Creates task for waiting all tasks. /// </summary> /// <param name="strategy">strategy for TaskCanceledException`s aggregation</param> /// <param name="tasks">task`s collection</param> public static PandaTask WaitAll(CancellationStrategy strategy, params IPandaTask[] tasks) { return(new WhenAllPandaTask(tasks, strategy)); }