我一直在研究.Net线程并了解了Threading.Task
和Threading.Task.Parallel
类。现在使用ForEach
类的Parallel
方法,我在一个单独的线程上处理每个对象。但是我相信ForEach
方法等待所有线程在它返回之前完成执行。这导致那些线程在其他线程处于空闲状态之前完成。我想让这些线程不断工作。所以这就是我希望做的事情:
我有线程A
负责切片从表中选择记录,然后启动n个工作线程来处理每个记录。
每次工作线程完成其工作时,都应该询问线程A
以处理下一条记录。
将记录分配给工作线程时,如果线程A
用完,它应该返回数据库并获取更多信息。我猜这个分配过程必须包含在一个关键的区块中。
有人能指出我适合我的情景的教程吗?
答案 0 :(得分:1)
您正在讨论的内容通常称为“线程池”。 MSDN's "How to: Use a Thread Pool"可能与您的兴趣相关。
答案 1 :(得分:1)
对于生产者消费者场景,您可以使用已经是线程安全的ConcurrentQueue。
这意味着你可以从任何一个线程填充它,并弹出所有其他消费者线程的项目,而不使用锁定。