如何在 .NET 频道上提供计数
How to make count available on .NET Channel
我有一个 UnboundedChannel
单身 reader\multiple 作家,我希望能够使用 Count
属性,但由于 CanCount
属性 始终为 false Count
正在抛出异常。我应该怎么做才能让它发挥作用,我在文档中找不到任何限制。
当 UnboundedChannelOptions.SingleReader
属性 在创建时设置为 true
时,UnboundedChannel
实现为 SingleConsumerUnboundedChannel
。 Based on the source, the Reader
object used by this class extends ChannelReader
没有显式设置 CanCount
,默认由 ChannelReader
设置为 false
。
不幸的是,所有这些 类 都是密封的,所以您不能只扩展它们并自己实现 Count
。将 SingleReader
选项保留为 false
将使用 UnboundedChannelReader
实现将 CanCount
设置为 true
并实现 Count
方法。如果只需要检查队列中是否还有更多元素,也可以使用TryPeek
代替。
所有有界通道实现都支持读取 Count
,因此如果您需要启用 SingleReader
和 Count
的无界通道,您可以只使用配置了最大容量的有界通道.实际上它将是无界的。
var channel = Channel.CreateBounded<int>(
new BoundedChannelOptions(Int32.MaxValue) { SingleReader = true });
Console.WriteLine(channel.Reader.CanCount); // True
我有一个 UnboundedChannel
单身 reader\multiple 作家,我希望能够使用 Count
属性,但由于 CanCount
属性 始终为 false Count
正在抛出异常。我应该怎么做才能让它发挥作用,我在文档中找不到任何限制。
当 UnboundedChannelOptions.SingleReader
属性 在创建时设置为 true
时,UnboundedChannel
实现为 SingleConsumerUnboundedChannel
。 Based on the source, the Reader
object used by this class extends ChannelReader
没有显式设置 CanCount
,默认由 ChannelReader
设置为 false
。
不幸的是,所有这些 类 都是密封的,所以您不能只扩展它们并自己实现 Count
。将 SingleReader
选项保留为 false
将使用 UnboundedChannelReader
实现将 CanCount
设置为 true
并实现 Count
方法。如果只需要检查队列中是否还有更多元素,也可以使用TryPeek
代替。
所有有界通道实现都支持读取 Count
,因此如果您需要启用 SingleReader
和 Count
的无界通道,您可以只使用配置了最大容量的有界通道.实际上它将是无界的。
var channel = Channel.CreateBounded<int>(
new BoundedChannelOptions(Int32.MaxValue) { SingleReader = true });
Console.WriteLine(channel.Reader.CanCount); // True