鸿蒙中如何实现多个异步任务并行执行,等待所有结果都返回后再继续下一步流程?

鸿蒙中如何实现多个异步任务并行执行,等待所有结果都返回后再继续下一步流程?

类似于Android RxJava中 Observable.zip()可以让多个网络请求并行执行,等待全部返回后再执行下一个动作

本文参与了思否 HarmonyOS 技术问答马拉松,欢迎正在阅读的你也加入。
阅读 1k
avatarAI BotBETA

在鸿蒙OS中,实现多个异步任务并行执行并等待所有结果返回后再继续下一步流程,你可以使用鸿蒙OS提供的并发编程工具,比如CompletableFuture或者ParallelTasks

CompletableFuture为例,你可以为每个异步任务创建一个CompletableFuture对象,然后使用CompletableFuture.allOf()方法等待所有任务完成。下面是一个简单的示例代码:

import ohos.app.Context;
import ohos.utils.concurrent.CompletableFuture;

public class AsyncTasksExample {
    public static void main(String[] args) {
        Context context = null; // 获取你的应用上下文

        // 创建多个异步任务
        CompletableFuture<String> task1 = CompletableFuture.supplyAsync(() -> {
            // 执行异步操作,返回结果
            return performAsyncTask1(context);
        });

        CompletableFuture<String> task2 = CompletableFuture.supplyAsync(() -> {
            // 执行异步操作,返回结果
            return performAsyncTask2(context);
        });

        // ... 创建更多任务 ...

        // 等待所有任务完成
        CompletableFuture.allOf(task1, task2, /* ... 其他任务 ... */).join();

        // 所有任务都完成后,继续执行下一步流程
        continueWithNextSteps(task1.get(), task2.get(), /* ... 其他任务的结果 ... */);
    }

    private static String performAsyncTask1(Context context) {
        // 执行异步任务1的逻辑,并返回结果
        return "Task 1 Result";
    }

    private static String performAsyncTask2(Context context) {
        // 执行异步任务2的逻辑,并返回结果
        return "Task 2 Result";
    }

    private static void continueWithNextSteps(String task1Result, String task2Result, /* ... 其他任务的结果 ... */) {
        // 所有异步任务完成后,执行下一步流程
        // 使用各个任务的结果进行后续操作
    }
}

在上面的示例中,performAsyncTask1()performAsyncTask2()方法代表异步任务,它们会返回任务的结果。CompletableFuture.supplyAsync()方法用于创建异步任务,并返回一个CompletableFuture对象。CompletableFuture.allOf()方法接受多个CompletableFuture对象,并返回一个新的CompletableFuture对象,这个新的对象在所有给定的任务都完成时才会完成。join()方法会阻塞当前线程,直到所有任务都完成。最后,你可以使用get()方法获取每个任务的结果,并在所有任务都完成后执行下一步流程。

1 个回答

老铁,你可以试试这个

import { promise } from '@system.promise';

function executeAsyncTask(task) {

return new Promise((resolve, reject) => {
    task.then(data => {
        resolve(data);
    }).catch(error => {
        reject(error);
    });
});

}

function paralleTasks() {

const tasks = [
    executeAsyncTask(asyncTask1),
    executeAsyncTask(asyncTask2),
    executeAsyncTask(asyncTask3)
];

return promise.all(tasks).then(results => {
    // 所有任务都完成后的处理逻辑
    // results包含了每个异步任务的返回结果
    console.log(results);
    // 执行下一步流程
    nextStep();
}).catch(error => {
    // 处理错误
    console.error(error);
});

}

本文参与了思否 HarmonyOS 技术问答马拉松,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
HarmonyOS
子站问答
访问
宣传栏