Проблема: запросы Http.get в будущих функциях вызываются один за другим.
//this should open 5 simultaneous http connections
for (var i= 0; i < 5; i++) {
getImage('[image soure]', i);
}
Я разделил код метода на несколько частей, чтобы лучше передать проблему.
import 'package:http/http.dart' as http;
void getImage(final String img, final int i) async {
var blurHash = '';
try {
//PART: LOADING
print('loading $img...');
//PART: A
var client = http.Client();
var res = await client.get(img);
print('$i: a');
//PART: B
var bbytes = res.bodyBytes;
print('$i: b');
//PART: C
var l = bbytes.toList();
print('$i: c');
...
blurHash = '...';
} catch (e) {
print(e);
}
}
Как должен выглядеть вывод консоли:
loading img.png
loading img.png
loading img.png
loading img.png
loading img.png
0: a
1: a
2: a
3: a
4: a
0: b
1: b
2: b
3: b
4: b
0: c
1: c
2: c
3: c
4: c
Как на самом деле выглядит вывод консоли:
loading img.png
loading img.png
loading img.png
loading img.png
loading img.png
0: a
0: b
0: c
1: a
1: b
1: c
2: a
2: b
2: c
3: a
3: b
3: c
4: a
4: b
4: c
Это означает, что часть загрузки выполняется одновременно, но похоже, что запросы http.get в Части A выполняются друг за другом.
getImage
=generateBlurhash
? Вы неawait
используетеFuture
вызовы методов. - person Christopher Moore   schedule 01.06.2020getImage
Futures одновременно работающих, в то время как вы ожидаете, что они будут запущены по одному. - person Christopher Moore   schedule 01.06.2020await
.await
не блокирует несколько экземпляров одного и того жеFuture
. Это просто другой синтаксис для.then
. - person Christopher Moore   schedule 01.06.2020for (var i= 0; i < 5; i++) { await getImage('[image soure]', i); }
, несколько экземпляров getImage не будут выполняться одновременно. Или я неправильно понял ваш комментарий? - person David Peters   schedule 01.06.2020