我对并行编程比较陌生,需要在不同的线程上运行后台进程。
场景是这样的——某些事情会导致第一个后台进程运行——它可能需要长达 45 秒(例如)才能完成。同时,在第一个后台进程运行后的某个任意点,另一个事件发生,这反过来又导致第二个后台进程运行 - 比如说 20 秒。我不想再等待 25 秒让第一个进程完成,我想让第二个进程立即在另一个线程上运行。但是,我还想限制可以拒绝的线程数。
我是否需要使用 BackgroundWorker 对象或类似对象创建某种排队类?对于这种情况,最好的方法是什么?
您最好的选择可能是使用任务并行库来完成此任务。您可以使用 Task.Run() 或类似的东西来启动新任务,而不是启动线程来运行您的任务。
任务并行库使用 TaskScheduler 在线程池上执行任务。TaskScheduler 尝试优化线程池中的线程数以增加吞吐量。由于 TaskSchedule 将线程从一个任务重用到下一个任务,因此您不太可能需要限制线程池中的线程数。
有关 TaskScheduler 的更多信息,请参阅:http: //msdn.microsoft.com/en-us/library/dd997402.aspx
如果您确定需要限制线程数,可以扩展 TaskScheduler 类:http: //msdn.microsoft.com/en-us/library/ee789351.aspx