第 8 章

并发与监听

有界并发处理、取消和文件事件流。

有界 parallel

example.hhy
let urls = [
    "https://example.com",
    "https://example.org"
]

urls
    |> parallel(2) { url ->
    http.get(url)
        |> timeout(5s)
        |> send
}
    |> print

parallel(n) 最多运行 n 个隔离 worker,按输入顺序输出;一个任务失败会取消剩余任务。跨 worker 的值必须满足 Sendable 检查。

监听文件变化

example.hhy
watch(path("./src"))
    |> where { event -> event.kind == "write" }
    |> debounce(300ms)
    |> for_each { event ->
    print(event.path)
}

watch 返回无限 FileEvent Stream。通过 debounce、where 和 take 等 Flow 算子组合自动化任务,并统一响应 Ctrl+C。