C产品如何满足特定用户需求?
- 内容介绍
- 文章标签
- 相关推荐
本文共计733个文字,预计阅读时间需要3分钟。
它底层默认采用+ConcurrentLinkedQueue+实现。
- 构造时可传入容量上限,比如
new BlockingCollection<int>(boundedCapacity: 10)</int>,超限时Add()会阻塞 - 不设上限时(默认构造),
Add()永不阻塞,但Take()在空时仍会阻塞 - 调用
CompleteAdding()后,后续Add()抛InvalidOperationException,已阻塞的Take()会逐个返回剩余项,之后才返回default(T)或抛异常(取决于是否启用GetConsumingEnumerable())
用 GetConsumingEnumerable() 写消费者最简洁
这是最常用、也最不容易出错的消费写法,内部自动处理“空时等待”和“完成信号”。
本文共计733个文字,预计阅读时间需要3分钟。
它底层默认采用+ConcurrentLinkedQueue+实现。
- 构造时可传入容量上限,比如
new BlockingCollection<int>(boundedCapacity: 10)</int>,超限时Add()会阻塞 - 不设上限时(默认构造),
Add()永不阻塞,但Take()在空时仍会阻塞 - 调用
CompleteAdding()后,后续Add()抛InvalidOperationException,已阻塞的Take()会逐个返回剩余项,之后才返回default(T)或抛异常(取决于是否启用GetConsumingEnumerable())
用 GetConsumingEnumerable() 写消费者最简洁
这是最常用、也最不容易出错的消费写法,内部自动处理“空时等待”和“完成信号”。

