Ejemplo n.º 1
0
        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));
 }