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); } }
protected override void StartGraph() { var sinkIn = CreateSubInlet(_stage.Out); SubFusingMaterializer.Materialize(_stage.SourceFactory().To(sinkIn.Sink), _inheritedAttributes); if (IsAvailable(_stage.Out)) { sinkIn.Pull(); } }
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); }
protected override void StartGraph() { var sourceOut = CreateSubOutlet(_stage.In); SubFusingMaterializer.Materialize(Source.FromGraph(sourceOut.Source).To(_stage.SinkFactory()), _inheritedAttributes); }