2011-05-29 148 views
0

是否有可能,並且有代碼示例。關於如何創建單個線程的多個實例。C#多線程

一個簡單的例子就是

Thread foo = new Thread(testThread); 

foo.Start(); // but start more than once instance 

@Andrew 好,使用Web客戶端時下載大約需要0.5秒的網頁。當我做多個線程執行相同的任務時(複製並粘貼同一個線程在不同的函數名下,並使用for循環的全局列表和索引器同時運行它們),使用4個副本線程,它會在大約0.15秒處下載一個頁面。從4個線程更快

3次是好的,但我希望有一個更清潔的解決方案

+0

mmm,簡單的? – 2011-05-29 19:33:25

+5

如果要創建批次,ThreadPool或Task將比Thread – 2011-05-29 19:35:37

+0

更合適好了,讀入線程池。 – Drake 2011-05-29 19:40:12

回答

3

線程實例是不一樣的線程邏輯。所以,你可以創建一個使用同樣的方法多線程,您不必將代碼複製並粘貼到單獨的完全相同的代碼中:

for(int i=0; i<4; i++) 
    (new Thread(threadProc)).Start(); 

這是合法的,可能你需要什麼 - 但每次的意見,如果你確實需要並行那麼這將是明智的使用線程池或者使用TPL任務:

for(int i=0; i<4; i++) 
    ThreadPool.QueueUserWorkItem(threadProc); 

for(int i=0; i<4; i++) 
    (new Task(threadProc)).Start(); 

這些變化可節省您創建和銷燬單個線程的開銷,並且可以實現更好的整體利用率。

所有這些方法都有可以將參數傳遞給函數的變體,例如變量i或其他信息來劃分工作。有關詳情,請參閱文檔。 http://msdn.microsoft.com/en-us/library/kbf0f1ct.aspx