バックグラウンドでジョブを順番に実行することを目的とする Backgroundworker があります。現在、1 つのジョブがマルチスレッド方式で実装されています。つまり、Backgroundworker は複数のスレッドを作成します。私は Task Parallel Library を使用しているので、Task.Factory.StartNew を使用して複数のタスクを作成します。
タスクが実行された後、Backgroundworker はすべてのタスクが完了するまで待機します。
次に、Backgroundworker の ManagedThreadID とすべてのタスクの ManagedThreadID を出力します。BackgroundWorker の ManagedThreadID は常に最初のタスクの ManagedThreadID と同じであることがわかりました。これはあってはならないことだと思うので、説明できません。Backgroundworker のスレッドは、それが作成するすべてのタスクとは異なる必要があるため、ManagedThreadID はすべて互いに異なる必要があると思います。
このシナリオが発生する理由を説明できる人はいますか? どうもありがとうございました。
編集:
コードは次のようになります。
Backgroundworker.Run(){
// Print Thread.CurrentThread.ManagedThreadID.
var task = Task.Factory.StartNew(action1); // action1, action2 also print ManagedThredID.
taskList.Add(task);
task = Task.Factory.StartNew(action2);
taskList.Add(task);
... // Several other tasks.
foreach(var task in taskList) task.Wait();
}
1 つのタスクが Backgroundworker と同じ ManagedThreadID を持っていることがわかります。