[英]Task.ContinueWith runs before the first task finishes executing
我創建了3個任務。 Task3取決於Task1和Task2的結果。 在調試代碼時,它可以正確執行,但是在運行應用程序時,Task3在Task1和Task2完成之前得到執行。
樣例代碼:
enter code here
public void LoadData()
{
// Set up tasks
Task Task1 = GetTask1Data();
Task Task2 = GetTask2Data();
Task Task3 = GetTask3Data();
new TaskFactory(TaskScheduler).StartNew(() =>
{
// Start first
Task1.Start();
new TaskFactory(TaskScheduler).ContinueWhenAll(
new[] {Task1 },
completedTasks =>
{
Task2.Start();
Task2.ContinueWith(r => Task3.Start());
});
}
}
}
private Task GetTask3Data()
{
return new Task(() =>
{
Task<ICollection<Object>> task = SubTask1();
if (task == null)
{
return;
}
task.ContinueWith(result =>
{
if (result != null)
Debug.WriteLine("Got correct data");
});
});
}
private Task<ICollection<Object>> SubTask1()
{
return new TaskFactory(TaskScheduler).StartNew(() =>
{
if (<bool condition return by Task1> && <book condition return by Task2>)
{
//Return executed data
}
return null;
});
}
提前致謝。
看起來您可能正在使用某種全局狀態來保存Task1
和Task2
的結果。 嘗試將您的任務組合成一個流程。
var task1Result = await GetTask1();
var task2Result = await GetTask2();
var task3Result = await GetTask3(task1Result, task2Result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.