【问题标题】:Does Channel<T> support multiple ChannelReaders and ChannelWriters, or only one of each?Channel<T> 是否支持多个 ChannelReaders 和 ChannelWriters,或者每个只支持一个?
【发布时间】:2020-05-23 01:46:00
【问题描述】:
Channel.CreateUnbounded 的文档说:
创建一个可供任意数量阅读器使用的无限通道,并且
作家兼任。
但是Channel 仅具有单个ChannelReader 和ChannelWriter 的属性,并且似乎没有一种方法可以围绕现有通道显式创建读取器/写入器。
我曾想过,如果您有多个生产者/消费者,他们应该共享同一个作者/读者实例,这是不正确的吗? “读者/作者的数量”是在谈论并发访问而不是类实例的数量吗?
【问题讨论】:
标签:
c#
system.threading.channels
【解决方案1】:
是的,文档意味着多个生产者(作者)和消费者(读者)。允许所有生产者使用该频道的单个ChannelWriter,所有消费者都可以使用其单个ChannelReader。不需要外部同步。 Channel<T> 类是 100% 线程安全的。
重要提示:在有多个消费者的情况下,通过该渠道的每件商品将只被一个消费者接收。 Channel<T> 不支持将一个元素传播给多个消费者,例如 BroadcastBlock<T> 数据流块。