如何正确做穿线

本文关键字:何正确 | 更新日期: 2023-09-27 18:01:43

我一直在学习。net线程,并了解了Threading.TaskThreading.Task.Parallel类。现在使用Parallel类的ForEach方法,我在一个单独的线程上处理每个对象。然而,我相信ForEach方法等待所有线程在它回来之前完成执行。这将导致一些线程在其他线程空闲之前完成任务。我想让这些线程持续工作。这就是我希望做的:

我有线程A负责从表中切片选择记录,然后启动n个工作线程来处理每个记录。

  1. 每当一个工作线程完成它的工作,它应该要求线程A处理下一个记录。

  2. 当分配记录给工作线程时,如果线程A耗尽,它应该返回数据库并获取更多的记录。我猜这个分配过程必须包装在一个临界区块。

谁能给我指一个适合我的教程?

如何正确做穿线

对于生产者消费者场景,你可以使用已经是线程安全的ConcurrentQueue。

这意味着你可以从任何A线程中填充它,并且在不使用锁的情况下从所有其他消费者线程中弹出项目来工作。

您正在讨论的通常称为"线程池"。MSDN的"如何使用线程池"可能与您的兴趣相关。