我需要 Crossbeam 的零容量通道的一个变体,如果没有接收操作crossbeam_channel::bounded(0)
,它不会阻塞。send()
在我的情况下,可以丢弃在没有正在进行的接收操作时发送的消息。接收者将在开始侦听后接收所有发送的消息。这类似于 Redis 通道发生的情况,但在线程之间。
类似的东西已经存在还是我需要自己实现?目前我不清楚如何实现这样的功能,但我可能可以从查看有界零容量通道的实现开始,并可能用非阻塞版本替换阻塞发送操作。
我需要 Crossbeam 的零容量通道的一个变体,如果没有接收操作crossbeam_channel::bounded(0)
,它不会阻塞。send()
在我的情况下,可以丢弃在没有正在进行的接收操作时发送的消息。接收者将在开始侦听后接收所有发送的消息。这类似于 Redis 通道发生的情况,但在线程之间。
类似的东西已经存在还是我需要自己实现?目前我不清楚如何实现这样的功能,但我可能可以从查看有界零容量通道的实现开始,并可能用非阻塞版本替换阻塞发送操作。
所有横梁通道也提供该方法的非阻塞版本send()
。它被称为try_send()
,如果无法发送消息,它会返回错误。对于零容量通道,这会导致您所要求的行为 – 只有“如果同时在通道的另一侧发生接收操作”,才会发送消息(引用自文档) .