我有一個啓動各種對象(類庫)的C#Windows服務。這些對象中的每一個都有自己的「處理」邏輯,通過使用ThreadPool
來啓動多個長時間運行的處理線程。我有一個例子,就像這樣:ThreadPool不立即啓動新線程
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(WorkerThread_Processing));
這很好。我的應用程序沒有問題,我的線程運行良好。現在
,進行迴歸測試,我開始那些相同的對象,但是從C#控制檯應用程序,而不是Windows服務。它調用相同的確切代碼(因爲它調用的是相同的對象),但WorkerThread_Processing
方法在啓動前延遲20秒。
我走了,並從ThreadPool
切換到Thread
,問題就消失了。這裏會發生什麼?我知道我沒有超過MaxThreads
(我最多開始20個線程)。
這絕對不應該發生,不發生在我身上。您的控制檯應用程序是否在執行其他任務如果你創建了一個全新的控制檯應用程序,並把'ThreadPool.QueueUserWorkItem(o => Console.WriteLine(「test」));'它做同樣的事情? – RandomEngy
另外,如果你想看看ThreadPool在做什麼,我建議運行Process Explorer並留意進程中的線程。你可以看到有多少線程池線程正在啓動。如果您的操作需要很長時間才能完成,則可能需要一段時間才能增加20個線程。 – RandomEngy