gpt4 book ai didi

asynchronous - Hopac——只有在有人收听的情况下,我才能赋予 channel 值(value)吗?

转载 作者:行者123 更新时间:2023-12-01 23:23:29 25 4
gpt4 key购买 nike

Hopac允许同步give一个 channel 的值,如果没有人在听,该 channel 将被阻塞,并异步 send如果它们没有被读取,它将缓冲这些值。

我想做一些介于两者之间的事情:如果有监听器,则给出一个值,或者如果没有监听器,则继续进行而不阻塞或缓冲该值。有没有办法做到这一点?

最佳答案

可以实现轮询givetake使用 alternative mechanism 的操作霍帕克。以下是此类轮询操作的可能签名:

module Ch =
module Poll =
val give: Ch<'x> -> 'x -> Job<bool>
val take: Ch<'x> -> Job<option<'x>>

这是该签名的实现:
module Ch =
module Poll =
let give xCh x =
Alt.pick (xCh <-? x >>%? true <|> Alt.always false)
let take xCh =
Alt.pick (xCh |>>? Some <|> Alt.always None)

这些工作的方式是,如果可用,则 promise 左侧替代方案。否则,将致力于右侧替代方案,因为它始终可用。

请注意,这些只有在通信的另一端确实在信道上等待的情况下才有意义。如果两端都尝试轮询,则不太可能发生通信。

Hopac 所基于的 Concurrent ML 库直接提供
polling operations .
也可以在 Hopac 中将轮询操作实现为优化的原语。

更新:我添加了轮询或非阻塞 givetake操作作为 Hopac 同步 channel 上的优化原语。它们由 Ch.Try 提供模块。

关于asynchronous - Hopac——只有在有人收听的情况下,我才能赋予 channel 值(value)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24721444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com