我需要控制一個線程爲我自己的目的:計算,等待,報告等...
在所有其他情況下,我使用ThreadPool
或TaskEx。Thread.Sleep會影響ThreadPool嗎?
在調試器中,當我在做Thread.Sleep()
時,我注意到UI的某些部分變得不那麼負責。雖然,沒有調試器似乎工作正常。
現在的問題是:如果我正在創建新的線程和Sleep()
'它可以影響ThreadPool /任務?
編輯:這裏是代碼示例:
在我的應用程序的一個隨機地點:
ThreadPool.QueueUserWorkItem((state) =>
{
LoadImageSource(imageUri, imageSourceRef);
});
在我的應用程序的另一個隨機地點:
var parsedResult = await TaskEx.Run(() => JsonConvert.DeserializeObject<PocoProductItem>(resultString, Constants.JsonSerializerSettings));
我ConcurrentQueue(修改,原件取自here):
創建線程隊列的需求:
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);
}
所以,問題多了一個時間:可以從new Thread(ProcessQueue);
調用Thread.Sleep(3000);
,影響ThreadPool或TaskEx.Run()?
如果你能展示一個簡短但完整的程序來展示這個問題,它將*真的*有用。 –
調用線程。睡眠()在線程池線程是非常不明智的,它只是一個岩石在通往線程池調度程序的道路上,看不到爲什麼一個線程沒有完成,所以不知道釋放另一個線程。沒有其他直接關係到用戶界面的響應能力,可能的任務也許會陷入困境。你總是使用Task.Delay()來代替。 –
@JonSkeet添加了一些示例,希望他們能幫到 –