•
a flow's builder runs once per collector, and nothing happens until collect
•
collection runs in the collector's coroutine and completes when the flow does
•
a flow builder may not withContext; changing the emission context is an error
•
flowOn changes the context of everything *upstream* of it, and nothing downstream
•
buffer decouples producer and consumer, conflate drops intermediate values, collectLatest cancels the in-flight collector
•
flow operators can call suspend functions inside them, which sequence operators cannot
•
hot, always holds a current value, conflates, and skips emissions equal to the previous one
•
hot, has no initial value, and its replay cache decides what a late subscriber sees
•
turn a cold flow hot in a scope, with a SharingStarted policy deciding when upstream runs
•
handle upstream failures with the catch operator; a try/catch wrapped around collect also catches the collector's own errors
•
hot, each element goes to exactly one receiver, capacity and BufferOverflow shape backpressure, and an unclosed channel hangs the receiver