我有一個Backgroundworker,其目的是在後臺順序運行作業。現在一個工作是以多線程的方式實現的。這意味着,Backgroundworker將創建多個線程。我使用任務並行庫,所以我使用Task.Factory.StartNew創建多個任務。Backgroundworker和TPL的任務有相同的ManagedThreadID?
任務運行後,Backgroundworker等待所有這些完成。
現在我打印Backgroundworker的ManagedThreadID和所有任務的ManagedThreadIDs。我發現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();
}
你會發現,一個任務具有相同的ManagedThreadID爲BackgroundWorker的。
請發佈您的代碼.... – 2010-09-17 12:06:36