我是新来的多任务,但我试图了解它是如何工作的。我有下面的代码,我认为它会创建一个任务并运行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