.NET多线程后台进程与线程限制?

时间:2013-05-09 16:19:11

标签: c# .net

我对并行编程比较陌生,需要在不同的线程上运行后台进程。

情况就是这样 - 某些东西会导致第一个后台进程运行 - 最多可能需要45秒(例如)才能完成。同时,在第一个后台进程运行后的某个任意点,发生另一个事件,这又导致第二个后台进程运行 - 比如20秒。我不想再等待25秒以完成第一个进程,我想要在另一个线程上立即运行第二个进程。但是,我还想限制可以被抛弃的线程数。

我是否需要使用BackgroundWorker对象或类似对象创建某种排队类?对于这种情况,最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

您最好的选择可能是使用任务并行库来完成此任务。您可以使用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