Akka.Streams.Tests.Dsl.GraphBalanceSpec.A_Balance_must_support_waiting_for_demand_from_all_non_cancelled_downstream_subscriptions C# (CSharp) Метод

A_Balance_must_support_waiting_for_demand_from_all_non_cancelled_downstream_subscriptions() приватный Метод

        public void A_Balance_must_support_waiting_for_demand_from_all_non_cancelled_downstream_subscriptions()
        {
            this.AssertAllStagesStopped(() =>
            {
                var s1 = TestSubscriber.CreateManualProbe<int>(this);

                var t = RunnableGraph.FromGraph(GraphDsl.Create(Sink.AsPublisher<int>(false),
                    Sink.AsPublisher<int>(false), Keep.Both, (b, p2Sink, p3Sink) =>
                    {
                        var balance = b.Add(new Balance<int>(3, true));
                        var source =
                            Source.From(Enumerable.Range(1, 3))
                                .MapMaterializedValue<Tuple<IPublisher<int>, IPublisher<int>>>(_ => null);
                        b.From(source).To(balance.In);
                        b.From(balance.Out(0))
                            .To(
                                Sink.FromSubscriber(s1)
                                    .MapMaterializedValue<Tuple<IPublisher<int>, IPublisher<int>>>(_ => null));
                        b.From(balance.Out(1)).To(p2Sink);
                        b.From(balance.Out(2)).To(p3Sink);
                        return ClosedShape.Instance;
                    })).Run(Materializer);
                var p2 = t.Item1;
                var p3 = t.Item2;

                var sub1 = s1.ExpectSubscription();
                sub1.Request(1);

                var s2 = TestSubscriber.CreateManualProbe<int>(this);
                p2.Subscribe(s2);
                var sub2 = s2.ExpectSubscription();

                var s3 = TestSubscriber.CreateManualProbe<int>(this);
                p3.Subscribe(s3);
                var sub3 = s3.ExpectSubscription();

                sub2.Request(2);
                s1.ExpectNoMsg(TimeSpan.FromMilliseconds(200));
                sub3.Cancel();

                s1.ExpectNext(1);
                s2.ExpectNextN(2).ShouldAllBeEquivalentTo(new[] {2, 3});
                s1.ExpectComplete();
                s2.ExpectComplete();
            }, Materializer);
        }