public void TestSetup() { request = Request.Get("foo/bar"); replicas = Enumerable.Range(0, 10).Select(i => new Uri($"http://replica-{i}/")).ToArray(); resultSources = replicas.ToDictionary(r => r, _ => new TaskCompletionSource <ReplicaResult>()); parameters = RequestParameters.Empty.WithConnectionTimeout(1.Seconds()); sender = Substitute.For <IRequestSender>(); sender .SendToReplicaAsync(Arg.Any <Uri>(), Arg.Any <Request>(), Arg.Any <TimeSpan?>(), Arg.Any <TimeSpan>(), Arg.Any <CancellationToken>()) .Returns(info => resultSources[info.Arg <Uri>()].Task); delaySources = replicas.Select(_ => new TaskCompletionSource <bool>()).ToList(); delaySourcesEnumerator = delaySources.GetEnumerator(); delaysPlanner = Substitute.For <IForkingDelaysPlanner>(); SetupDelaysPlanner(); delaysProvider = Substitute.For <IForkingDelaysProvider>(); SetupForkingDelays(1.Milliseconds()); tokenSource = new CancellationTokenSource(); token = tokenSource.Token; strategy = new ForkingRequestStrategy(delaysProvider, delaysPlanner, 3); }
internal ForkingRequestStrategy([NotNull] IForkingDelaysProvider delaysProvider, [NotNull] IForkingDelaysPlanner delaysPlanner, int maximumParallelism) { if (delaysProvider == null) { throw new ArgumentNullException(nameof(delaysProvider)); } if (delaysPlanner == null) { throw new ArgumentNullException(nameof(delaysPlanner)); } if (maximumParallelism <= 0) { throw new ArgumentOutOfRangeException(nameof(maximumParallelism), "Maximum parallelism level must be a positive number."); } this.delaysProvider = delaysProvider; this.delaysPlanner = delaysPlanner; this.maximumParallelism = maximumParallelism; }
public ForkingRequestStrategy([NotNull] IForkingDelaysProvider delaysProvider, int maximumParallelism) : this(delaysProvider, ForkingDelaysPlanner.Instance, maximumParallelism) { }
/// <summary> /// Creates an instance of <see cref="ForkingRequestStrategy"/> with given <paramref name="maximumParallelism"/> and <paramref name="delaysProvider"/>. /// </summary> public static ForkingRequestStrategy Forking(IForkingDelaysProvider delaysProvider, int maximumParallelism) { return(new ForkingRequestStrategy(delaysProvider, maximumParallelism)); }