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