Skip to content

Commit

Permalink
Update Flow.collect documentation (Kotlin#3085)
Browse files Browse the repository at this point in the history
  • Loading branch information
qwwdfsad committed Dec 15, 2021
1 parent 48aa354 commit 41b88af
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions kotlinx-coroutines-core/common/src/flow/Flow.kt
Original file line number Diff line number Diff line change
Expand Up @@ -172,17 +172,25 @@ import kotlin.coroutines.*
*
* **The `Flow` interface is not stable for inheritance in 3rd party libraries**, as new methods
* might be added to this interface in the future, but is stable for use.
*
* Use the `flow { ... }` builder function to create an implementation, or extend [AbstractFlow].
* These implementations ensure that the context preservation property is not violated, and prevent most
* of the developer mistakes related to concurrency, inconsistent flow dispatchers, and cancellation.
*/
public interface Flow<out T> {

/**
* Accepts the given [collector] and [emits][FlowCollector.emit] values into it.
* This method should never be implemented or used directly.
*
* The only way to implement the `Flow` interface directly is to extend [AbstractFlow].
* To collect it into a specific collector, either `collector.emitAll(flow)` or `collect { ... }` extension
* should be used. Such limitation ensures that the context preservation property is not violated and prevents most
* of the developer mistakes related to concurrency, inconsistent flow dispatchers and cancellation.
* This method can be used along with SAM-conversion of [FlowCollector]:
* ```
* myFlow.collect { value -> println("Collected $value")
* ```
*
* ### Method inheritance
*
* To ensure the context preservation property, it is not recommended implementing this method directly.
* Instead, [AbstractFlow] can be used as the base type to properly ensure flow's properties.
*/
public suspend fun collect(collector: FlowCollector<T>)
}
Expand Down

0 comments on commit 41b88af

Please sign in to comment.