关于 kotlin-concurrency-and-flow
用于审查和设计 Kotlin 协程与 Flow 行为的编码技能,指导工作归属、取消、状态、事件、共享和缓冲语义的决策。
主要功能
- 01梳理协程归属与取消边界
- 02维护 suspend API 契约
- 03选择 Flow 状态与事件语义
- 04按主题查找参考资料
适用场景
- 01审查协程生命周期与失败处理
- 02选择一次性事件的传递语义
- 03确定 Flow 共享与缓冲方式
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ chrisbanes/ skills --skill kotlin-concurrency-and-flow安装后在 Claude Code 中输入/kotlin-concurrency-and-flow确认已加载。
附带文件references/flow-state-events.mdreferences/structured-concurrency.md
详细介绍
Kotlin 并发与 Flow
核心原则
为异步工作指定明确的所有者和生命周期,然后使用交付与重放语义符合产品约定的原语来建模持久状态和瞬时事件。
流程
- 确定每个协程的所有者、取消边界、生产者、消费者、持久状态和瞬时事件。
- 在更改 API 之前,将现有的调用方可见约定与所需的所有者和生命周期进行比较。如果挂起式 API 已经让调用方拥有取消、结果和失败的处理权,则保持不变;不要仅为方便而添加作用域、
launch、回调或 deferred 包装器。 - 选择生命周期能够拥有该工作的作用域;不要保留任意作用域,也不要在非挂起式 API 后隐藏无结构化的启动操作。
- 将可渲染的当前数据建模为状态;只有在明确接受事件丢失和重放行为时,才将命令式的一次性工作建模为事件。确认是由一个消费者处理每个事件,还是必须将事件发送给每个活跃消费者。
Channel将每个事件交给一个消费者;配置好的SharedFlow会向活跃消费者广播。如果消费者约定尚不明确,请说明两种选项以及作出选择前需要确定的事项。对于必须跨越收集器空档期保留的单消费者导航交接,选择有界的Channel(Channel.BUFFERED)(而不是UNLIMITED),并通过receiveAsFlow()暴露;如果已确认事件丢失是缺陷,就不要保留重放数为零的SharedFlow。 - 根据生产者和消费者的生命周期选择 Flow 共享与缓冲语义,而不是套用默认值。
- 阅读下方与相关主题对应的参考资料。
- 当取消、重启、重放和失败行为都能从公共 API 中看出,并且调用方无需猜测工作由谁拥有时,即可完成。
主题路由
| 信号 | 阅读 |
|---|---|
存储的 CoroutineScope、原始 Thread 或 Executor 工作、init { launch }、即发即忘 API、runBlocking、宽泛捕获或取消边界 | 结构化并发 |
StateFlow、SharedFlow、Channel、stateIn、SharingStarted、.value、状态更新、哨兵值或一次性事件 | Flow 状态与事件 |
| 运行 Gradle 以验证更改 | Gradle 运行;切勿直接使用 ./gradlew |
| Compose 收集或 UI 副作用处理 | Compose 状态与副作用 |
评论
支持 Markdown