当前位置: 首页 > 知识库问答 >
问题:

任务在第一个任务完成执行之前继续运行

乐正远航
2023-03-14

我已经创建了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个答案

曹泉
2023-03-14

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

var task1Result = await GetTask1();
var task2Result = await GetTask2();
var task3Result = await GetTask3(task1Result, task2Result);
 类似资料:
  • 我正在从事一个spring boot项目,以自动化与gradle的集成测试。我最近开始在一家新企业工作,我的同事们按如下方式运行集成测试:在构建中。gradle文件有一个集成测试任务 启动任务后,应用程序开始在指定端口运行,然后打开postman,导入集合并运行测试。 我的工作是找到一种方法来跳过额外的点击,即自动运行邮递员集合。第一个想法是使用postman-run gradle插件,但由于企业

  • 我有一个任务执行10秒,周期为1秒,没有延迟,另一个任务执行30秒,周期为5秒,当第一个任务完成时。 此外,我需要取消两个任务时,一个按钮被按下。 > 我尝试了基本线程,但将阻塞GUI,直到两个任务都执行 我尝试,但我这里是一个接一个地执行任务,但不是每个任务都定期执行 我尝试了预定的executor,但预定的executor是异步的,我知道如何使用 任何反馈都很感激。

  • 问题内容: 我有以下使用类的课程。所以我想做的是,在运行cp1实例处理方法的同时,我要并行运行。 但是,我要按顺序cp1,所以我要它运行并完成,如果cp2没有完成或失败,那就很好。如果确实失败,我想加入结果。该示例中未返回任何内容,但我想返回结果。 为此,应该使用TaskExecutor吗?还是线程? 我只希望cp2与cp1并行运行。或者,如果我添加更多内容,例如说cp3,我希望它也可以与cp1并

  • 我正在从一个Spring Boot应用程序(在Java11中)同步调用一个REST API来下载一个文件。 这就是REST API的样子: 首先调用“/download”->API返回“文件生成正在进行”状态 所以,5秒后再调用它->API再次返回“文件生成正在进行”状态 因此,在5秒后再次调用它->API再次返回“文件生成正在进行”状态(但此时假定文件已生成) 因此,5秒后再调用一次->API返

  • 我在gradle项目中添加了一个任务: 现在,任务总是在任务之前运行。这很好,因为构建任务包含许多步骤。现在我想显式禁用其中一个包含的任务。