1

我有一个UnboundedChannel读者\多个作者,我希望能够使用Count属性,但由于CanCount属性始终为 false Count,因此会引发异常。我应该怎么做才能使它工作,我找不到文档中列出的任何限制。

4

2 回答 2

3

UnboundedChannelOptions.SingleReader属性设置为true创建时,UnboundedChannel实现是SingleConsumerUnboundedChannel. 根据 sourceReader该类使用的对象在ChannelReader没有明确设置的情况下扩展,默认CanCount设置为。falseChannelReader

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

于 2021-12-17T03:54:14.193 回答
1

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

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

Console.WriteLine(channel.Reader.CanCount); // True
于 2021-12-17T10:20:48.557 回答