BoundedChannelFullMode的元素移除操作是否属于SingleReader范畴?
System.Threading.Channels:SingleReader与FullMode移除操作的关系 背景说明
ChannelOptions.SingleReader属性:用于在同一时间仅允许一次读取操作的场景下,启用通道的优化实现。BoundedChannelOptions继承自ChannelOptions,其FullMode属性控制通道已满时的行为,其中两个取值会移除通道内部元素:BoundedChannelFullMode.DropNewest:移除并忽略通道中最新的元素,为待写入元素腾出空间。BoundedChannelFullMode.DropOldest:移除并忽略通道中最旧的元素,为待写入元素腾出空间。
核心疑问
在写入过程中执行的上述移除最新/最旧元素的操作,是否会被算作SingleReader属性所定义的读取操作?
解答
这种写入时的元素移除操作会被算作SingleReader定义的读取操作。
这意味着当组合使用SingleReader = true与这两种FullMode取值时:
- 不仅两次读取操作不能重叠
- 读取操作与写入操作也不能重叠(因为写入过程中包含了对通道内部元素的移除逻辑,该逻辑会占用
SingleReader限制的"单次读取"权限)
需要注意的是,这两种FullMode取值与SingleReader = true并不互斥,只是会带来上述额外的并发限制。
内容的提问来源于stack exchange,提问作者Ben Voigt
相关产品推荐
相关产品推荐

