まず、このような別のスレッドがあり、それを見なかった場合は申し訳ありません!私の問題は、複数のスレッドを作成したいということです。ただし、これらのスレッドは同じ機能を実行する必要があります。どうすればこれを実現できますか?そのようです :
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();
}
違いはここで見つけることができます:
私はあなたが持っているものに何の間違いも見ていません(多分myFunctionでコードのいくつかを共有すれば、より良い画像を得ることができます)。
独自のスレッドを手動で作成する代わりに、ThreadPoolを使用するか、タスク並列ライブラリを使用することをお勧めします。
ここにいくつかのテクニックがあります:
System.Threading.Tasks.Parallel.For(0, 20, myFunction); // myFunction should accept an int, and return void)
myFunctionのシグネチャが異なる場合は、ラムダを使用して「変換」できます。ここで関数を呼び出す関数を呼び出していることに注意してください。
Parallel.For(0, 20, i => myFunction()); //(I could pass any param to my function in this example)
これがスレッドプールの方法です
System.Threading.Threadpool.QueueUserWorkItem(myFunction) // myFunction needs to accept an object
//署名付きでスレッドプールにキューイングする方法は次のとおりです
ThreadPool.QueueUserWorkItem(s => myFunction());
タスクを使用してそれを行うことについてすでに言及した別のポスター。あなたがしていることが非常に単純な場合、私はParallel.Forを使用します。