Thread.Sleep会影响ThreadPool吗?

我需要为自己的目的控制一个线程:计算,等待,报告等…
在所有其他情况下,我正在使用ThreadPool或TaskEx。

在调试器中,当我在做Thread.Sleep() ,我注意到UI的某些部分变得不那么负责了。 虽然,没有调试器似乎工作正常。

问题是:如果我正在创建新的Thread和Sleep() ,它会影响ThreadPool / Tasks吗?

编辑:这是代码示例:

我的应用中的一个随机位置:

 ThreadPool.QueueUserWorkItem((state) => { LoadImageSource(imageUri, imageSourceRef); }); 

我的应用中的另一个随机位置:

 var parsedResult = await TaskEx.Run(() => JsonConvert.DeserializeObject(resultString, Constants.JsonSerializerSettings)); 

我的ConcurrentQueue(修改后,原文取自此处 ):

为队列需要创建线程:

 public void Process(T request, bool Async = true, bool isRecurssive = false) { if (processThread == null || !processThread.IsAlive) { processThread = new Thread(ProcessQueue); processThread.Name = "Process thread @ " + Environment.TickCount; processThread.Start(); } 

如果其中一个任务报告了一些网络问题,我希望这个线程稍等一下

 if (ProcessRequest(requestToProcess, true)) { RequestQueue.Dequeue(); } else { DoWhenTaskReturnedFalse(); Thread.Sleep(3000); } 

那么,问题还有一次:可以Thread.Sleep(3000);new Thread(ProcessQueue);调用new Thread(ProcessQueue); ,影响ThreadPool或TaskEx.Run()?

Thread.Sleep()影响它调用的线程,如果你在ThreadPool线程中调用Thread.Sleep()并尝试排队更多,它可能会达到ThreadPool线程的最大数量并等待线程完成之前执行另一个。

http://msdn.microsoft.com/en-us/library/system.threading.threadpool.setmaxthreads.aspx

不,Thread.Sleep()仅在当前线程上。 Thread.Sleep(int32)文档 :

线程挂起的毫秒数。

假设您放入睡眠的线程是从线程池中获取的,那么它肯定会影响线程池。 如果您明确说明该线程应该hibernate,那么在此期间线程池不能重用它。 如果有一些等待调度的作业,这可能会导致线程池产生新线程。 创建新线程总是很昂贵 – 线程是系统资源。

但是,您可以查看以更智能的方式挂起执行代码的Task.Delay方法(以及asyncawait ) – 允许在等待期间重用该线程。 请参阅此Thread.Sleep与Task.Delay文章。