Multithreading 横梁零容量信道,发送时不阻塞

Multithreading 横梁零容量信道,发送时不阻塞,multithreading,rust,message-passing,crossbeam,Multithreading,Rust,Message Passing,Crossbeam,我需要一个横梁零容量通道的变体,如果没有接收操作,它不会阻塞send()。在我的例子中,在没有进行接收操作的情况下发送的消息可以被丢弃。接收器将在开始侦听后接收发送的所有消息。这与Redis通道的情况类似,只是在线程之间 这样的东西已经存在了,还是我需要自己去实现?目前我还不清楚如何实现这样的功能,但我可能可以从有界零容量通道的实现开始,并可能用非阻塞版本替换阻塞发送操作。所有横梁通道都提供非阻塞版本的send()方法。它被调用,如果消息无法发送,它将返回一个错误。对于零容量通道,这将导致您要求

我需要一个横梁零容量通道的变体,如果没有接收操作,它不会阻塞
send()
。在我的例子中,在没有进行接收操作的情况下发送的消息可以被丢弃。接收器将在开始侦听后接收发送的所有消息。这与Redis通道的情况类似,只是在线程之间


这样的东西已经存在了,还是我需要自己去实现?目前我还不清楚如何实现这样的功能,但我可能可以从有界零容量通道的实现开始,并可能用非阻塞版本替换阻塞发送操作。

所有横梁通道都提供非阻塞版本的
send()
方法。它被调用,如果消息无法发送,它将返回一个错误。对于零容量通道,这将导致您要求的行为–只有“在通道另一侧同时发生接收操作时”(引用文档)才会发送消息。

所有横梁通道也提供非阻塞版本的
send()
方法。它被调用,如果消息无法发送,它将返回一个错误。对于零容量信道,这会导致您要求的行为–只有“在信道另一侧同时发生接收操作时”(引用文档)才会发送消息。

这就是您想要的吗@是的,我正要编辑我的问题。通过查看源代码,我发现零容量通道也有
try\u send
。在我看来,从文件上看不清楚。为什么你认为从文件上看不清楚?您可以单击its上的
crossbeam\u channel::bounded()
返回的类型,它将向您显示这些类型提供的方法。还请注意,有界和无界通道的发送方具有相同的类型,
crossbeam\u channel::Sender
。保留该问题–它可能对其他人也有用。我会把我的评论变成答案。这就是你想要的吗@是的,我正要编辑我的问题。通过查看源代码,我发现零容量通道也有
try\u send
。在我看来,从文件上看不清楚。为什么你认为从文件上看不清楚?您可以单击its上的
crossbeam\u channel::bounded()
返回的类型,它将向您显示这些类型提供的方法。还请注意,有界和无界通道的发送方具有相同的类型,
crossbeam\u channel::Sender
。保留该问题–它可能对其他人也有用。我会把我的评论变成答案。