繁体   English   中英

计算是否支持 asnc 请求?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM