C# 如何正确地执行线程?

C# 如何正确地执行线程?,c#,.net,multithreading,thread-safety,parallel-processing,C#,.net,Multithreading,Thread Safety,Parallel Processing,我一直在学习.Net线程,并学习了threading.Task和threading.Task.Parallel类。现在,使用Parallelclass I的ForEach方法在单独的线程上处理每个对象。然而,我相信ForEach方法在返回之前会等待所有线程完成执行。这导致在其他线程之前完成的线程处于空闲状态。我想让这些线程不断工作。这就是我希望做的: 我让线程A负责从表中选择记录,然后启动n个工作线程来处理每个记录 每当工作线程完成其工作时,它都应该向线程a请求下一条要处理的记录 将记录分配给工

我一直在学习.Net线程,并学习了
threading.Task
threading.Task.Parallel
类。现在,使用
Parallel
class I的
ForEach
方法在单独的线程上处理每个对象。然而,我相信
ForEach
方法在返回之前会等待所有线程完成执行。这导致在其他线程之前完成的线程处于空闲状态。我想让这些线程不断工作。这就是我希望做的:

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

  • 每当工作线程完成其工作时,它都应该向线程
    a
    请求下一条要处理的记录

  • 将记录分配给工作线程时,如果线程
    A
    用完,它应该返回数据库并获取更多记录。我猜这个分配过程必须包装在一个关键的部分块中


  • 有人能给我指一个适合我的场景的教程吗?

    你所讨论的通常被称为“线程池”。可能与您的兴趣相关。

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

    这意味着您可以从任何线程填充它,并从所有其他使用者线程中弹出要处理的项目,而无需使用锁定