私は100スレッドを持っています。別のスレッドが実行される前に10スレッドを実行して、スレッド配列のままにしておきたい。誰か助けてくれますか?C#のスレッドのブロックグループ
私の英語については申し訳ありません。少し早いですがお礼を。
私は100スレッドを持っています。別のスレッドが実行される前に10スレッドを実行して、スレッド配列のままにしておきたい。誰か助けてくれますか?C#のスレッドのブロックグループ
私の英語については申し訳ありません。少し早いですがお礼を。
次のコードは10個のタスクを開始し、次の10個のタスクを開始する前に完了するまで待機します。注意すべき点の1つは、10のタスクのセットが開始する順序が保証されないことです。つまり、この例は10のセットが終了するまでブロックされますが、タスク1はタスク0より前に開始されます。
private static void Main()
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < 100; i++)
{
if (i % 10 == 0)
{
Console.WriteLine("Waiting for all tasks to complete");
Task.WaitAll(tasks.ToArray());
Console.WriteLine("All tasks have completed. Continuing...");
tasks.Clear();
}
tasks.Add(Task.Factory.StartNew(TrivialTask, new TaskState(i)));
}
}
public class TaskState
{
public TaskState(int id)
{
TaskId = id;
}
public int TaskId { get; set; }
}
private static void TrivialTask(object state)
{
TaskState taskState = (TaskState) state;
Thread.Sleep(1000);
Console.WriteLine("Task " + taskState.TaskId + " completed");
}
Task Parallel Libraryをチェックしてください。
Hereは、並列化の程度を手動で制御できるように見える代わりのスケジューラーです。
あなたはTPLであなたの仕事を達成できるようです。タスクを実行し、Task.WaitAll()で完了を待つか、別のタスクを実行して、完了した後に何かを行うにはContinueWithを使用します。例えば、UIスレッド...その他のコードを実行してください... hereを参照してください。 Albahariのウェブサイトにはparallel programmingに関する記事があります。あなたはそれを読むことができます、本当に素敵な書かれた。
本当に100スレッドが必要ですか?あなたが望むように聞こえるのは、あなたが "仕事"を割り当てることができる "スレッドのプール"のようなものです... –
あなたの質問は論理的に意味が分かりません。 – TomTom
Hey Hung、他の10個のスレッドが起動するまで10個のスレッドをブロックする方法を求めていますか? – Tung