簡體   English   中英

Task.ContinueWith在第一個任務完成執行之前運行

[英]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;
                });
    }

提前致謝。

看起來您可能正在使用某種全局狀態來保存Task1Task2的結果。 嘗試將您的任務組合成一個流程。

var task1Result = await GetTask1();
var task2Result = await GetTask2();
var task3Result = await GetTask3(task1Result, task2Result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM