예제 #1
0
        public void Next(IIterationId id, ISchedule scheduler)
        {
            bool thisThreadWasWorking = scheduler.Action == ScheduleAction.Execute;

            if (thisThreadWasWorking)
            {
                scheduler.Idle();
                Interlocked.Increment(ref _localIdlerCount);
            }
            else
            {
                int tryLockIdlerCount       = Interlocked.Decrement(ref _localIdlerCount);
                int estimatedworkingThreads = _pool.InitializedThreadCount - tryLockIdlerCount;

                if (estimatedworkingThreads <= ThreadLimit)
                {
                    scheduler.Execute();
                }
                else
                {
                    Interlocked.Increment(ref _localIdlerCount);
                    scheduler.Idle(DelayInterval);
                }
            }
        }
예제 #2
0
 public void Next(IIterationId id, ISchedule scheduler)
 {
     if (_executedBatchIterations < _batchSize)
     {
         Interlocked.Add(ref _executedBatchIterations, 1);
         scheduler.Execute();
     }
     else
     {
         scheduler.Idle(_pollInterval);
     }
 }
        private async Task <bool> Execute(ISchedule scheduleItem, ITestExecutionContext context)
        {
            var result = scheduleItem.Execute(context);

            if (result.UsersChanged != 0)
            {
                var internalContext = (ITestExecutionContextInternal)context;
                if (result.UsersChanged > 0)
                {
                    await AddNewUsers(result.UsersChanged, internalContext);
                }
                else
                {
                    RemoveUsers(result.UsersChanged * -1, internalContext);
                }
            }

            return(result.ScheduleComplete);
        }