.NET 并发集合的应用与实现
1. 生产者 - 消费者模型中的任务处理
在某些场景下,我们会在for循环中启动生产者任务。每个生产者任务都会调用CalcSumRoot方法,这是一个计算开销较大的数学运算。而消费者任务只是简单地将输出显示到屏幕上。因此,两个消费者任务大部分时间可能处于非忙碌等待状态。
为了在所有生产者任务完成后调用CompleteAdding方法,我们将所有生产者任务对象添加到List<Task>中,并调用Task.Factory的ContinueWhenAll方法。这样,只有当所有生产者任务完成后,延续任务才会运行,其唯一的工作就是调用BlockingCollection的CompleteAdding方法。示例代码如下:
Task.Factory.ContinueWhenAll(tasks.ToArray(), result => { results.CompleteAdding(); Console.Write("\nCompleted adding."); }); Console.ReadLine();2. 使用 ConcurrentStack 创建对象池
对象池是一组预先初始化的对象,应用程序可以使用这些对象,而不必每次都创建和销