那麼它不知道什麼是在XTThreadPool類有點棘手,但你可以有一個猜測...
的機會,這第一位......
taskWrapper = XTThreadPool.DEFAULT_POOL.Run((System.Threading.ThreadStart)delegate()
{
//Remote procedure execution and result processing code.
//Some vars set in here are used after the Join() below.
}, true, true);
...啓動異步運行的線程,並傳遞放置註釋的部分中指定的方法。這可能是通過創建一個Thread實例作爲委託給它的構造函數並調用newThread.Start()
來實現的,該實例在應用程序的線程池內的新線程上開始執行。然後,參考線可以用來檢查線程的狀態,看看它的完成與否,這可能是這部分做什麼:
while (taskWrapper.Status == XTThreadPool.Task.STATUS.None)
{
System.Threading.Thread.Sleep(10);
}
這似乎有點怪我。 System.Threading.Thread
訪問當前線程,而不是由線程池啓動的線程,而Sleep方法僅表示「無所事事」。所以當前線程正在等待taskWrapper實例啓動的線程進入非None狀態。現在這是困難的地方,因爲我們不知道taskWrapper在做什麼。
實際上它可能只是等待線程完成執行,但那麼就沒有一個單獨的線程有任何意義,因爲工作也可以在上面的while循環中完成。
然後將此:
taskWrapper.Join();
線上面可以做任何事情,就像我說的這取決於什麼的taskWrapper是落實。但根據名字我猜想它使用Thread.Join方法,這基本上導致調用線程(此線程)等待,直到它調用的線程(taskWrapper)完成。然而,taskWrapper本身實際上並不是一個線程(基於對上面Status屬性值的檢查),更可能它只是線程的一個包裝。
我完全猜測這是誠實的,它真的可以做任何事情。在沒有看到XTThreadPool類的代碼的情況下,無論DEFAULT_POOL是否是實例,都無法確切知道發生了什麼。
在第一次檢查時,if該代碼正在做我以上猜測的結果,沒有意義讓另一個線程來完成這項工作,沒有任何一點有while循環!整個事情可以用Run中調用的方法中的任何東西來代替。
也只是猜測在這裏,但等待狀態不是'無'可能意味着等待,直到任務實際開始(即它已被安排到一個底層線程)。 –
非常感謝您的幫助:)我相信你是對的,這可能是在原始線程中完成的。 +1 :) –