繁体   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