首先我很抱歉,如果有另一個線程這樣,我沒有看到它! 我的問題是:我想創建多個線程。但是這些線程必須執行相同的功能。 我怎麼能做到這一點? 像這樣:多種線程的一種類型,一種功能
for(int i=0;i<20;i++)
{
Thread t = new Thread(myFunction);
t.Start();
}
有什麼辦法,使這項工作?
首先我很抱歉,如果有另一個線程這樣,我沒有看到它! 我的問題是:我想創建多個線程。但是這些線程必須執行相同的功能。 我怎麼能做到這一點? 像這樣:多種線程的一種類型,一種功能
for(int i=0;i<20;i++)
{
Thread t = new Thread(myFunction);
t.Start();
}
有什麼辦法,使這項工作?
爲什麼不使用任務?這也是異步(因爲這是你在找什麼,我認爲
for(int i=0;i<20;i++)
{
Task task = new Task(new Action(myFunction));
task.Start();
}
的差異可以在這裏找到:
確定但是任務和線程有什麼區別? –
http://stackoverflow.com/questions/4130194/what-is-the-difference-between-task-and-thread – Maximc
我沒有看到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。
感謝您的信息 –
你的問題是什麼?有沒有拋出異常? –
*確實*有效。這將是絕對好的。現在告訴我們你的實際情況到底出了什麼問題。 –
您的代碼將每次運行'myFunction' 20次,在不同的線程上運行。如果這是你想要的,那麼只需編譯你的代碼並親自查看。如果您希望跨20個線程並行運行* myFunction,那麼這就是另一回事。無論如何,請更具體地說明您的問題。 –