我是新來的多任務,但我試圖瞭解它是如何工作的。我有下面的代碼,我認爲它會創建一個任務並運行performInitialLoad方法,並在完成時觸發initializeDataHarvester方法。 performInitialLoad工作正常,並且它到達方法的底部,因爲我可以在控制檯中看到「初始標記數據加載完成」文本。但它似乎從未觸發initializeDataHarvester方法。有任何想法嗎?立即C#Task.WhenAll不觸發下一個任務
private void mainTaskLoader() {
Task initialLoad = new Task(performInitialTagLoad);
initialLoad.Start();
Task dataHarvester = new Task(() => {
Task.WhenAll(initialLoad);
}).ContinueWith(t => initializeDataHarvester());
}
private void performInitialTagLoad() {
allTags = globals.getTags();
foreach (KeyValuePair<String, String> tag in allTags) {
try {
globals.insertUpdateHarvesterData(tag.Key.ToString(), commObject.Read(tag.Value.ToString()));
} catch (Exception e) {
Console.WriteLine("Error on initial load: " + e.Message, true);
}
}
Console.WriteLine("Initial tag data load complete");
}
private void initializeDataHarvester() {
Console.WriteLine("Got here!");
}
當你的dataHarvester任務正在啓動? – skalinkin
這就是爲什麼你從不使用任務構造函數;使用Task.Run創建一個代表線程池線程中委託運行的任務。 – Servy
@skalinkin,我不打電話給它,因爲我認爲這就是ContinueWith方法的用處,一旦initialLoad任務完成,它將啓動dataHarvester任務?那不正確? – Phil