【发布时间】:2021-07-03 12:21:47
【问题描述】:
我是 Flutter 的新手。我需要在一个屏幕中调用 5 个 API 网络调用。我使用 Async/await 需要很长时间。我们如何使用隔离或其他类似方法在单独的线程上并行执行它?
【问题讨论】:
-
您可以使用 .then 而不是 await so 并在完成时获取价值来替换您需要的内容,而不会阻塞每个 api
标签: flutter dart-isolates
我是 Flutter 的新手。我需要在一个屏幕中调用 5 个 API 网络调用。我使用 Async/await 需要很长时间。我们如何使用隔离或其他类似方法在单独的线程上并行执行它?
【问题讨论】:
标签: flutter dart-isolates
您可以为此目的使用isolate,isolate 是dart 中的一种多线程。 Isolate 创建一个新线程并在新线程上执行操作,以便分配负载。您不能将变量作为数据来回发送,而是使用端口发送消息。
这是一个简单的示例,使用 API 调用进行隔离并使用端口将数据发送回主线程。
首先让我们创建一个函数,它将作为隔离的入口点:
static entryPoint(SendPort sendPort)async{
var response = await http.get('https://www.thecocktaildb.com/api/json/v1/1/search.php?s=margarita');
sendPort.send(response.body); //sending data back to main thread's function
}
现在让我们创建隔离:
static void callApi()async{
var recievePort = new ReceivePort(); //creating new port to listen data
await Isolate.spawn(entryPoint, recievePort.sendPort);//spawing/creating new thread as isolates.
recievePort.listen((message) { //listening data from isolate
print(message);
});
}
【讨论】:
您可以使用dio 包并调用多个并发API请求,请查看文档:
Package: https://pub.dev/packages/dio
【讨论】:
你可以使用 Future.wait()
【讨论】: