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