Flow.fromSinkAndSourceCoupled
Allows coupling termination (cancellation, completion, erroring) of Sinks and Sources while creating a Flow between them.
Flow operators composed of Sinks and Sources
Signature
def fromSinkAndSourceCoupled[I, O](sink: Graph[SinkShape[I], _],source: Graph[SourceShape[O], _]): Flow[I, O, NotUsed]
def fromSinkAndSourceCoupledMat[I, O, M1, M2, M](sink: Graph[SinkShape[I], M1], source: Graph[SourceShape[O], M2])(combine: (M1, M2) => M): Flow[I, O, M]
Description
Allows coupling termination (cancellation, completion, erroring) of Sinks and Sources while creating a Flow between them. Similar to Flow.fromSinkAndSource
however couples the termination of these two operators.
E.g. if the emitted Flow
gets a cancellation, the Source
is cancelled, however the Sink will also be completed. The table below illustrates the effects in detail:
Returned Flow | Sink (in) | Source (out) |
---|---|---|
cause: upstream (sink-side) receives completion | effect: receives completion | effect: receives cancel |
cause: upstream (sink-side) receives error | effect: receives error | effect: receives cancel |
cause: downstream (source-side) receives cancel | effect: completes | effect: receives cancel |
effect: cancels upstream, completes downstream | effect: completes | cause: signals complete |
effect: cancels upstream, errors downstream | effect: receives error | cause: signals error or throws |
effect: cancels upstream, completes downstream | cause: cancels | effect: receives cancel |
The order in which the in and out sides receive their respective completion signals is not defined, do not rely on its ordering.