如何在不发送任何内容的情况下检查频道是不是已满[重复]

Posted

技术标签:

【中文标题】如何在不发送任何内容的情况下检查频道是不是已满[重复]【英文标题】:How to check if channel is full without sending anything [duplicate]如何在不发送任何内容的情况下检查频道是否已满[重复] 【发布时间】:2021-10-01 09:53:33 【问题描述】:

我知道我可以通过尝试发送如下内容来检查频道是否已满:

select 
    case ch <- "data":
        // sent
    default:
        // channel full

但是,有没有一种方法可以在不发送任何内容的情况下检查通道是否已满?

【问题讨论】:

我想知道你为什么需要它。我不明白你为什么不把你的替代逻辑放在默认情况下。 【参考方案1】:

cap(ch) 返回通道 ch 的缓冲区容量 len(ch)返回频道ch中当前未处理的消息数

所以要检查频道是否已满,您可以这样做:

cap(ch) == len(ch)

【讨论】:

这几乎是无用的,因为通道的主要目的是并发同步,如果有任何并发​​访问的可能性,结果值总是陈旧的。 我见过这样的东西用于“高水印”检查...len(ch) == cap(ch)*8/10。所以它有时会很有用。同样严格地说,欺骗是错误的。

以上是关于如何在不发送任何内容的情况下检查频道是不是已满[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何让机器人在不使用命令的情况下向特定频道中的特定公会发送消息

我可以在不加入 IRC 频道的情况下向它发送消息吗?

如何在不使用搜索的情况下查找 youtube 频道当前是不是正在直播?

无法在不重定向的情况下创建付款发票

如何在不需要任何重定向配置的情况下使 TCP 服务器在路由器 (NAT) 后面工作

如何在不手动检查的情况下确定网站是不是使用 webassembly?