我有一个 Backgroundworker,其目的是在后台按顺序运行作业。现在一项工作以多线程方式实现。这意味着,Backgroundworker 将创建多个线程。我使用任务并行库,所以我使用 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();
}
您会发现其中一项任务与 Backgroundworker 具有相同的 ManagedThreadID。