4

我使用 ThreadPool.QueueUserWorkItem 在 Windows CE 上创建线程(我使用 .NET Framework 3.5)。有时线程等待某些东西并且启动得太晚了。在 QueueUserWorkItem 文档中,它说委托将在“线程池线程可用时”执行。

有没有办法强制 ThreadPool 立即执行我的委托?Thread.Start() 会解决这个问题吗?

谢谢!

4

3 回答 3

3

首先,QueueUserWorkItem不创建线程,它只是在 ThreadPool 的队列中放置一个“任务”,供工作人员获取并执行。在饱和的情况下(任务多于可用线程),无法保证工作人员何时可以执行任务。如果您想立即执行,请改用 of 的实例Thread。使用 ThreadPool 提高几率的唯一方法是增加工作人员的数量。

编辑:为了清楚起见,如果线程池线程确实是空闲的,它们会拿起工作并执行它通常比启动一个新线程更快。

于 2013-06-05T16:00:04.847 回答
1

ThreadPool 的大小是有限的。所以你不能在同一时间吃尽可能多的线程。如果所有线程都忙,那么您必须等待一个线程可用。

检查您想要午餐的线程数并将其与线程池大小进行比较 ->GetMaxThreads()

然后,如果您想要更多线程,只需调整池的大小SetMaxThreads(int)

于 2013-06-05T15:43:27.967 回答
1

如果您从一个池中启动很多线程,您可能会遇到没有空闲线程并且您的请求排队的情况,这就是为什么有时它开始迟到的原因。尝试增加池中工作线程的最大数量。使用ThreadPool.SetMaxThreadsThreadPool.SetMinThreads配置池。

于 2013-06-05T15:45:46.703 回答