# 异步流

- [参考文档](https://www.kotlincn.net/docs/reference/coroutines/flow.html#%E6%B5%81%E5%8F%96%E6%B6%88%E6%A3%80%E6%B5%8B)
--------------------------------------
## 一、流构建器
- 1. 创建一个流构建器示例
```kotlin
fun simple(): Flow<Int> = flow { // 流构建器
    for (i in 1..3) {
        delay(100) // 假装我们在这里做了一些有用的事情
        emit(i) // 发送下一个值
    }
}

// 收集这个流
simple().collect { value -> println(value) }
```
- 2.流使用 emit 函数发射值。
- 3.流使用 collect 函数收集值。
- 4.flow 构建器中的代码直到流被收集的时候才运行。

## 二、其他类型的流构建器
- 1.flowOf 构建器定义了一个发射固定值集的流。
- 2.使用 .asFlow() 扩展函数,可以将各种集合与序列转换为流。

## 三、流取消基础
- 1.流的收集可以在当流在一个可取消的挂起函数(例如 delay)中挂起的时候取消。

## 四、过渡流操作符
- 1. 就像使用集合与序列一样。 过渡操作符应用于上游流,并返回下游流。 这些操作符也是冷操作符,就像流一样。
这类操作符本身不是挂起函数。它运行的速度很快,返回新的转换流的定义。

- 2. map操作符
```kotlin
suspend fun performRequest(request: Int): String {
    delay(1000) // 模仿长时间运行的异步工作
    return "response $request"
}

fun main() = runBlocking<Unit> {
    (1..3).asFlow() // 一个请求流
        .map { request -> performRequest(request) }
        .collect { response -> println(response) }
}
```

## 五、转换操作符
- 1. 在流转换操作符中,最通用的一种称为transform。它可以用来模仿简单的转换,例如 map 与 filter,以及
实施更复杂的转换。 使用transform操作符,我们可以 发射 任意值任意次。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值