C# 4.0 .net 4.0 c#:暂时暂停/恢复线程池中并行运行的线程?

C# 4.0 .net 4.0 c#:暂时暂停/恢复线程池中并行运行的线程?,c#-4.0,C# 4.0,我可以使用.net线程池设置一个多线程环境,并获得了显著的性能优势。这在我的应用程序的后台运行 现在,当用户请求新任务时,我希望它获得最大的CPU资源,以最大限度地提高性能。因此,我想暂时暂停我开始的所有线程(通过ThreadPool.Queueuserworkitem方法),然后在前台用户请求的新任务完成后继续 我的问题可能有几种解决方案: a。启动较少的后台线程,以便任何新的用户请求都能获得CPU资源的一部分。(但我失去了我所获得的性能增益:() b、 为新用户请求的任务的线程设置更高的优先

我可以使用.net线程池设置一个多线程环境,并获得了显著的性能优势。这在我的应用程序的后台运行

现在,当用户请求新任务时,我希望它获得最大的CPU资源,以最大限度地提高性能。因此,我想暂时暂停我开始的所有线程(通过ThreadPool.Queueuserworkitem方法),然后在前台用户请求的新任务完成后继续

我的问题可能有几种解决方案:

a。启动较少的后台线程,以便任何新的用户请求都能获得CPU资源的一部分。(但我失去了我所获得的性能增益:()

b、 为新用户请求的任务的线程设置更高的优先级。(不确定这是否有效?)

c、 挂起/恢复我开始的线程池线程。但是挂起/恢复/中断线程是非常不受鼓励的。此外,这可能会变得棘手和容易出错

还有其他想法吗

注意:当用户发出请求时,执行任务通常不需要超过300毫秒。但是,当我在后台启动线程池线程时,现在需要大约3秒才能完成(更糟的10倍)!如果需要500-800毫秒,我就可以了。所有后台线程都需要大约8秒完成(如果需要1-2秒,我就可以了)。因此,我现正尝试(a)项方案


提前感谢!

请注意,线程调度是由CPU完成的,因此无法从程序内部进行定向。唯一可以做的是设置线程优先级(在新线程上也是如此,而不是在线程池线程上)。请检查部分

由于您的需求是在执行新任务时挂起所有后台线程,所以您可以创建一个类级标志

现在,您可以将检查点放在要在后台任务中执行的方法中。在检查点处,检查类级别标志,如果设置了,则调用Thread.Sleep,它应该(而不是必须)触发OS/CPU线程调度器的线程上下文切换


在方法中放置检查点(由ThreadPool执行)类似于放置

只使用线程而不是线程池。