[英]Does compute support asnc request?
我有一个字符串地址列表,如:
List<String> addressStrings = [....];
我正在使用geocoding
插件来获取这些地址字符串的地址数据和标记,例如:
//This is a class-level function
Future<List<MarkerData>> getMarkerDataList() async {
List<MarkerData> list = [];
addressStrings.forEach((element) async {
final result = await locationFromAddress(element);
final markerData = MarkerData(element, result.first);
list.add(markerData);
});
return list;
}
但它按预期冻结了 UI。 我尝试使用compute
在另一个隔离中执行操作,例如:
//This is a top-level function
Future<List<MarkerData>> getMarkerDataList(List<String> addressStrings) async {
List<MarkerData> list = [];
addressStrings.forEach((element) async {
final result = await locationFromAddress(element);
final markerData = MarkerData(element, result.first);
list.add(markerData);
});
return list;
}
//This is a class-level function
Future<List<MarkerData>> getMarkerData()async{
final result = await compute(getMarkerDataList, addressStrings);
return result;
}
但它不起作用并在控制台中显示Unhandled exception
。
我猜final result = await locationFromAddress(element);
请求是这里的问题。 因为它确实在该声明之前通过了,但没有通过该声明。
所以,我的问题是: compute
支持async
? 如果是的话,我在这里做错了什么? 如果不是,我怎样才能在不阻塞 UI 的情况下有效地执行这样的异步性能密集型任务?
是的,据我所知 async 确实支持计算 - 这是一篇应该有帮助的文章:
https://medium.com/flutterdevs/flutter-performance-optimization-17c99bb31553
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.