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