凝华的异步目标是"够用":编译到 JS,配合 @async/Task/Channel。
@async
Task
Channel
标注 @async 的函数是异步函数。没有 await 关键词——调用异步函数自动 await。
await
@async fun main() { var r = readFile("data.txt") // 异步调用,自动 await(不需要写 await) print(toStr(r)) }
main()
var t = Task { expensiveWork() } // 并发启动
协调异步数据传递:
var ch = Channel[Nat]() // 无缓冲(默认) ch.send(1) // 满则发送方等待 var v = ch.receive() // 空则接收方等待
防止数据竞争:
var mu = Mutex() mu.lock() // ... 操作共享状态 ... mu.unlock() // 或一行搞定: mu.withLock({ doWork() })
@atomic var counter = 0 // 对该类型的读写是原子的
惰性冷流:
flow.map({ v -> v * 2 }) // 组合 flow.collect({ v -> print(toStr(v)) }) // 消费
Mutex
@atomic
Flow
There was an error while loading. Please reload this page.
首页