Я хочу создать очередь будущих задач с ключом, чтобы избежать добавления в очередь той же задачи, что уже добавлена.
Это мой сценарий:
- асинхронный вызов url1
- асинхронный вызов url1
- асинхронный вызов url2
Что мне нужно, это:
- добавить вызов к url1 в очередь и выполнить его
- НЕ добавляйте второй вызов url1 в очередь и не выбрасывайте его
- добавить вызов в url2 в очередь, дождаться завершения вызова url1 и выполнить его
Я читал о StreamQueue и Queue, но не знаю, подходит ли он для моих нужд.
Другая структура, о которой я читал, - await for
с потоком.
Итак, я попробовал что-то вроде:
await for (var url in stream) { // <--- I do not know how create this stream
var url = Uri.https('www.example.com', url);
List<dynamic> tmpItems;
try {
http.Response res = await http.get(url);
final data = json.decode(res.body);
tmpItems = _parseItems(data["data"]);
} catch(e) {
print(e);
}
if (this.mounted) {
return setState(() {
_items.addAll(tmpItems ?? []);
});
}
}
Я не знаю, как создать stream
и добавить к нему вызов.