我使用 ThreadPool.QueueUserWorkItem 在 Windows CE 上创建线程(我使用 .NET Framework 3.5)。有时线程等待某些东西并且启动得太晚了。在 QueueUserWorkItem 文档中,它说委托将在“线程池线程可用时”执行。
有没有办法强制 ThreadPool 立即执行我的委托?Thread.Start() 会解决这个问题吗?
谢谢!
我使用 ThreadPool.QueueUserWorkItem 在 Windows CE 上创建线程(我使用 .NET Framework 3.5)。有时线程等待某些东西并且启动得太晚了。在 QueueUserWorkItem 文档中,它说委托将在“线程池线程可用时”执行。
有没有办法强制 ThreadPool 立即执行我的委托?Thread.Start() 会解决这个问题吗?
谢谢!
首先,QueueUserWorkItem
不创建线程,它只是在 ThreadPool 的队列中放置一个“任务”,供工作人员获取并执行。在饱和的情况下(任务多于可用线程),无法保证工作人员何时可以执行任务。如果您想立即执行,请改用 of 的实例Thread
。使用 ThreadPool 提高几率的唯一方法是增加工作人员的数量。
编辑:为了清楚起见,如果线程池线程确实是空闲的,它们会拿起工作并执行它通常比启动一个新线程更快。
ThreadPool 的大小是有限的。所以你不能在同一时间吃尽可能多的线程。如果所有线程都忙,那么您必须等待一个线程可用。
检查您想要午餐的线程数并将其与线程池大小进行比较 ->GetMaxThreads()
然后,如果您想要更多线程,只需调整池的大小SetMaxThreads(int)
如果您从一个池中启动很多线程,您可能会遇到没有空闲线程并且您的请求排队的情况,这就是为什么有时它开始迟到的原因。尝试增加池中工作线程的最大数量。使用ThreadPool.SetMaxThreads
和ThreadPool.SetMinThreads
配置池。