こんにちは私は_noOfThreads
を一度に実行する定義されたタスクとして持っています。だから私は%
演算子を使用してタスクを続行し、ループの最後に私はTasks.WaitAll
を持っています。これがコードスニペットです。Task.WaitAllは子タスクを待っていませんか?
for (int index = 0; index < count; index++)
{
if (index < _noOfThreads)
tasks[index] = Task.Factory.StartNew(somedelegate);
else
tasks[index % _noOfThreads].ContinueWith(task => { foo.bar(); },
TaskContinuationOptions.AttachedToParent);
}
Task.WaitAll(tasks);
ただし、子タスクが完了するのを待っていないことに気付きます。親タスクが完了するとすぐに、Task.WaitAll
の次の行が実行されます。子タスクを待つようにこのコードを変更するにはどうすればよいですか?私はあなたのようにあなたのタスクを割り当てていると思う
[Task.Continueで期待したとおりに動作しません](http://stackoverflow.com/questions/6997480/task-continuewith-not-working-how-i-expected) – mellamokb
ここでやっているように見えるのは、タスクスケジューリングを決めることです。スケジューリングをカスタマイズする場合は、[TaskScheduler](http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.aspx)から派生したものを見ることができます。つまり、デフォルトのスケジューラは、多数のタスクがキューに入れられているときに、スレッドでシステムに過負荷をかけないようにしています。 –
@ダン:それは私の心配ではありません。これをTaskSchedulerに伝えたいのか分かりません。私は変数を持っており、その変数と同じくらい多くのタスクを開始したい。要するに、私は、スレッドの数を定義するセマフォのようなものをシミュレートしたいだけで、その数のスレッドだけが特定の時間にそのコードを入れることができます。 –