我有需要在特定后台线程上执行的数据。来自所有其他线程的代码都需要调用此数据。是否有关于使用队列进行同步以支持此线程要求的良好教程或最佳实践?
我有需要在特定后台线程上执行的数据。来自所有其他线程的代码都需要调用此数据。是否有关于使用队列进行同步以支持此线程要求的良好教程或最佳实践?
这是一篇关于线程池的有趣文章:
对于更简单的用例,您也可以使用.Net自带的ThreadPool类。
我最喜欢的解决方案之一类似于生产者/消费者模式。
我创建了一个主线程(几乎就是我的程序的Main()),它拥有一个阻塞队列对象。
这个主线程产生多个工作线程,简单地从中央阻塞线程弹出并处理任务。因为它是一个线程安全的阻塞队列,同步位很容易--TaskQueue.Dequeue()调用将阻塞,直到生产者/主线程入队一个任务为止。
您可以动态管理您想要的工作线程数或根据配置变量进行修复--因为它们只是从队列中弹出东西,所以工作线程的数量不会增加任何复杂性。
在我的情况下,我有一个服务来处理若干不同类型的任务。我让队列类型化以处理像TaskQueueTask这样的通用内容。然后,我会子类化它并覆盖Execute()方法。