如何在 .NET 频道上提供计数

How to make count available on .NET Channel

我有一个 UnboundedChannel 单身 reader\multiple 作家,我希望能够使用 Count 属性,但由于 CanCount 属性 始终为 false Count 正在抛出异常。我应该怎么做才能让它发挥作用,我在文档中找不到任何限制。

UnboundedChannelOptions.SingleReader 属性 在创建时设置为 true 时,UnboundedChannel 实现为 SingleConsumerUnboundedChannelBased on the source, the Reader object used by this class extends ChannelReader 没有显式设置 CanCount,默认由 ChannelReader 设置为 false

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

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

var channel = Channel.CreateBounded<int>(
    new BoundedChannelOptions(Int32.MaxValue) { SingleReader = true });

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