我有一个UnboundedChannel读者\多个作者,我希望能够使用Count属性,但由于CanCount属性始终为 false Count,因此会引发异常。我应该怎么做才能使它工作,我找不到文档中列出的任何限制。
2 回答
3
当UnboundedChannelOptions.SingleReader属性设置为true创建时,UnboundedChannel实现是SingleConsumerUnboundedChannel. 根据 source,Reader该类使用的对象在ChannelReader没有明确设置的情况下扩展,默认CanCount设置为。falseChannelReader
不幸的是,所有这些类都是密封的,所以你不能只是扩展它们并Count自己实现。保留SingleReader选项 asfalse将使用UnboundedChannelReader确实设置CanCount并true实现Count方法的实现。如果您只需要检查队列中是否有更多元素,您也可以使用TryPeek。
于 2021-12-17T03:54:14.193 回答
1
所有有界通道实现都支持读取Count,因此如果您需要一个启用的无界通道,您可以只使用配置有最大容量的有界通道SingleReader。Count实际上它将是无限的。
var channel = Channel.CreateBounded<int>(
new BoundedChannelOptions(Int32.MaxValue) { SingleReader = true });
Console.WriteLine(channel.Reader.CanCount); // True
于 2021-12-17T10:20:48.557 回答