示例#1
0
            public override void OnPull()
            {
                var source  = _stage._sourceFactory();
                var subSink = new SubSinkInlet <TOut>(this, "LazySource");

                subSink.Pull();

                SetHandler(_stage.Out, () => subSink.Pull(), () =>
                {
                    subSink.Cancel();
                    CompleteStage();
                });

                subSink.SetHandler(new LambdaInHandler(() => Push(_stage.Out, subSink.Grab())));

                try
                {
                    var value = SubFusingMaterializer.Materialize(source.ToMaterialized(subSink.Sink, Keep.Left),
                                                                  _inheritedAttributes);
                    _completion.SetResult(value);
                }
                catch (Exception e)
                {
                    subSink.Cancel();
                    FailStage(e);
                    _completion.TrySetException(e);
                }
            }
示例#2
0
            protected override void StartGraph()
            {
                var sinkIn = CreateSubInlet(_stage.Out);

                SubFusingMaterializer.Materialize(_stage.SourceFactory().To(sinkIn.Sink), _inheritedAttributes);
                if (IsAvailable(_stage.Out))
                {
                    sinkIn.Pull();
                }
            }
示例#3
0
            protected override void StartGraph()
            {
                var sourceOut = CreateSubOutlet(_stage.In);
                var sinkIn    = CreateSubInlet(_stage.Out);

                var graph = Source.FromGraph(sourceOut.Source)
                            //temp fix becaues the proper fix would be to have a concept of cause of cancellation. See https://github.com/akka/akka/pull/23909
                            //TODO register issue to track this
                            .Via(DelayCancellation <TIn>(_delay))
                            .Via(_stage.FlowFactory())
                            .To(sinkIn.Sink);

                SubFusingMaterializer.Materialize(graph, _inheritedAttributes);

                if (IsAvailable(_stage.Out))
                {
                    sinkIn.Pull();
                }

                _activeOutIn = Tuple.Create(sourceOut, sinkIn);
            }
示例#4
0
            protected override void StartGraph()
            {
                var sourceOut = CreateSubOutlet(_stage.In);

                SubFusingMaterializer.Materialize(Source.FromGraph(sourceOut.Source).To(_stage.SinkFactory()), _inheritedAttributes);
            }