. net多线程:有线程限制的后台进程

本文关键字:后台进程 线程 多线程 net | 更新日期: 2023-09-27 18:12:57

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

这个场景是这样的——某些事情会导致第一个后台进程运行——它可能需要45秒(例如)才能完成。与此同时,在第一个后台进程运行后的任意时刻,另一个事件发生,从而导致第二个后台进程运行——比如20秒后。我不想再等25秒让第一个进程完成,我想让第二个进程在另一个线程上立即运行。但是,我还想限制可以丢弃的线程数。

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

. net多线程:有线程限制的后台进程

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