private void ScheduleForkIfNeeded(List <Task> currentTasks, Request request, IRequestTimeBudget budget, int currentReplicaIndex, int totalReplicas, CancellationToken cancellationToken) { if (currentReplicaIndex == totalReplicas - 1) { return; } if (currentTasks.Count >= maximumParallelism) { return; } var forkingDelay = delaysProvider.GetForkingDelay(request, budget, currentReplicaIndex, totalReplicas); if (forkingDelay == null) { return; } if (forkingDelay.Value < TimeSpan.Zero) { return; } if (forkingDelay.Value >= budget.Remaining) { return; } currentTasks.Add(delaysPlanner.Plan(forkingDelay.Value, cancellationToken)); }
private void SetupDelaysPlanner() { delaysPlanner .Plan(Arg.Any <TimeSpan>(), Arg.Any <CancellationToken>()) .Returns( _ => { delaySourcesEnumerator.MoveNext(); return(delaySourcesEnumerator.Current.Task); }); }