C# 实现生产者消费者队列
开发过程中经常会碰到这样的场景:需要从一个地方获取一些数据,然后处理数据并将其保存在数据库中。 private void FetchData() {} private void SaveData() {} static void Main(string[] args) { for (int i = 0; i < 10; i++) { FetchData(); // 获取数据 SaveData(); // 处理并保存 } } 例如上述代码例子这样顺序执行,执行会很慢,原因是获取数据和处理并保存的过程都可能导致阻塞,然而FetchData()每次取数据并不需要等待上一条数据保存完成再进行。 这样的场景非常适合用 生产者消费者队列 :生产者就是FetchData(),用来生产数据;消费者SaveData(),用来消费数据。 举个实际例子,我们需要通过一个Web Api获取一些城市的天气情况,并将其保存到数据库中。 实现方式: 需要一个任务队列,生产者可以向队列中插入任务,消费者可以从任务队列中取出任务来执行。 为保证线程安全,使用一个锁来保护这个队列的访问。 制定一个退出策略,在所有任务完成时释放资源。 下边是实现的完整代码: class Program { // 任务队列 static Queue<string> _tasks = new Queue<string>(); //