Task.ContinueWith在第一个任务完成执行之前运行

时间:2013-12-04 17:24:46

标签: c# wpf multithreading

我创建了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;
                });
    }

提前致谢。

1 个答案:

答案 0 :(得分:0)

看起来您可能正在使用某种全局状态来保存Task1Task2的结果。尝试将您的任务组合成一个流程。

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