2013-02-02 63 views
-1

首先我很抱歉,如果有另一個線程這樣,我沒有看到它! 我的問題是:我想創建多個線程。但是這些線程必須執行相同的功能。 我怎麼能做到這一點? 像這樣:多種線程的一種類型,一種功能

for(int i=0;i<20;i++) 
{ 
    Thread t = new Thread(myFunction); 
    t.Start(); 
} 

有什麼辦法,使這項工作?

+1

你的問題是什麼?有沒有拋出異常? –

+3

*確實*有效。這將是絕對好的。現在告訴我們你的實際情況到底出了什麼問題。 –

+0

您的代碼將每次運行'myFunction' 20次,在不同的線程上運行。如果這是你想要的,那麼只需編譯你的代碼並親自查看。如果您希望跨20個線程並行運行* myFunction,那麼這就是另一回事。無論如何,請更具體地說明您的問題。 –

回答

0

爲什麼不使用任務?這也是異步(因爲這是你在找什麼,我認爲

for(int i=0;i<20;i++) 
{ 
    Task task = new Task(new Action(myFunction)); 
    task.Start(); 
} 

的差異可以在這裏找到:

What is the difference between task and thread?

+0

確定但是任務和線程有什麼區別? –

+0

http://stackoverflow.com/questions/4130194/what-is-the-difference-between-task-and-thread – Maximc

0

我沒有看到anythign毛病你有什麼(也許如果你分享myFunction中的一些代碼,我們可以得到更好的圖片)

我會建議你使用ThreadPool,或者你使用Task Parallel庫而不是手動創建自己的線程。

這裏有幾個技巧:

System.Threading.Tasks.Parallel.For(0, 20, myFunction); // myFunction should accept an int, and return void) 

如果myFunction的簽名是不同的,你可以使用lambda「翻譯」 - 要知道,你撥打的電話在這裏如下功能的功能:

Parallel.For(0, 20, i => myFunction()); //(I could pass any param to my function in this example) 

這裏的AA線程池的方式

System.Threading.Threadpool.QueueUserWorkItem(myFunction) // myFunction needs to accept an object 

//這裏是如何將其排入到threadpoo l帶有任何簽名

ThreadPool.QueueUserWorkItem(s => myFunction()); 

另一個海報已經提到使用任務來完成它。如果你在做什麼很簡單,我只需要使用Parallel.For。

+0

感謝您的信息 –