请说明在 C# 中实现生产者-消费者模式的一种或多种方法,并阐述其核心机制。
考察说明
考查对 C# 并发编程中生产者-消费者模式的理解及实现方式。
回答思路
- 【回答框架 1】生产者-消费者模式通过中间缓冲区解耦生产者和消费者的速度差异。C# 中可用 BlockingCollection<T>,默认基于 ConcurrentQueue<T>,支持阻塞和限流。生产者调用 Add,消费者调用 Take 或 TryTake,使用 CompleteAdding 通知结束。
- 【回答框架 2】也可用 Channel<T>,是 .NET Core 3.0+ 的异步管道,支持读写分离、背压和异步操作,适合高吞吐场景。生产者用 WriteAsync,消费者用 ReadAsync,可指定容量实现限流。
- 【回答框架 3】还可以用 SemaphoreSlim 和 Queue<T> 手动实现,但需自行处理同步和原子性。更推荐使用并行库或 Channel 来减少复杂度。
- 【关键点 1】BlockingCollection<T> 默认基于 ConcurrentQueue<T>,提供阻塞和限流。
- 【关键点 2】Channel<T> 支持异步读写和背压,适合 .NET Core 3.0+。
- 【关键点 3】生产者-消费者模式通过缓冲区解耦生产和消费。
- 【易错点 1】BlockingCollection 的 CompleteAdding 后不能再添加,需注意调用时机。
- 【易错点 2】Channel 的容量设置需根据场景调整,过小可能降低吞吐,过大可能浪费内存。