首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使计数在.NET信道上可用

如何使计数在.NET信道上可用
EN

Stack Overflow用户
提问于 2021-12-16 08:06:47
回答 2查看 523关注 0票数 1

我有一个UnboundedChannel单读取器\多个写入器,我希望能够使用Count属性,但是由于CanCount属性总是false,所以Count会抛出一个异常。我应该怎么做才能使它工作,我找不到任何限制登记在文档中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-17 03:54:14

UnboundedChannelOptions.SingleReader属性在创建时设置为true时,UnboundedChannel实现是SingleConsumerUnboundedChannel根据来源,该类使用的Reader对象扩展ChannelReader,而不显式设置CanCount,默认情况下,ChannelReaderCanCount设置为false

不幸的是,所有这些类都是密封的,所以您不能仅仅扩展它们并自己实现Count。将SingleReader选项保留为false将使用UnboundedChannelReader实现,该实现将CanCount设置为true并实现Count方法。如果您只需要检查队列中是否有更多的元素,也可以使用TryPeek

票数 4
EN

Stack Overflow用户

发布于 2021-12-17 10:20:48

所有有界信道实现都支持读取Count,因此,如果您需要一个SingleReaderCount-enabled无界通道,您只需使用配置了最大容量的有界通道。实际上,它将是无限的。

代码语言:javascript
运行
复制
var channel = Channel.CreateBounded<int>(
    new BoundedChannelOptions(Int32.MaxValue) { SingleReader = true });

Console.WriteLine(channel.Reader.CanCount); // True

更新:当前只有一个有限制的通道实现,即BoundedChannel (内部密封类),它忽略了SingleReader设置。换句话说,无论要使用多少读取器,您都会得到相同的实现。这有点令人失望,因为它表明,丰富的可用选项集并不对应于同样丰富的实现集。基本上,在.NET 6中只有三个实现可用,即UnboundedChannel<T>SingleConsumerUnboundedChannel<T>BoundedChannel<T>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70375696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档