У меня есть следующий код для вызова API, чтобы получить мои данные, а затем проанализировать результаты. Насколько я понимаю, «asyn c» на forEach l oop НЕ блокирует, поэтому я использую входной bool для установки, хочу ли я, чтобы они блокировали вызовы или нет.
Моя проблема сейчас заключается в том, что в некоторых моих вызовах возникает ошибка «сокет: слишком много открытых файлов», предположительно, потому что я достиг предела во флаттере для слишком многих вещей, ожидающих HTTP-ответов API (дайте мне знать, если вам нужна дополнительная информация из функций "TX")
Так что мой вопрос заключается в следующем. Есть ли быстрый способ задушить неблокирующее «forEach» l oop ниже и, возможно, сделать ожидание на будущее. Задержка (Длительность (миллисекунды: 250)), скажем, для каждого 5-го раза через l oop?
Конечно, если я просто посчитаю и жду asyn c вызова в приведенном ниже коде, я думаю, что forEach l oop будет продолжать проходить через все остальное.
Нужно ли составлять временный список всех записей и делать их в неблокирующих партиях?
if (makeBlocking) {
for (var r in _commissionData[gwSerial].rooms.entries) {
Map<String, dynamic> res = await _getSetupRoomDevicesApi.tx(
_token, _clientId, gwSerialString, r.value.id);
Map<String, dynamic> res2 = await _listCommissionAssociations.tx(
_token, _clientId, gwSerialString, r.value.id);
processCommissionData(r.value, res, res2);
}
} else {
if (_commissionData != null) {
_commissionData[gwSerial]?.rooms?.forEach((roomId, r) async {
Map<String, dynamic> res = await _getSetupRoomDevicesApi.tx(
_token, _clientId, gwSerialString, r.id);
Map<String, dynamic> res2 = await _listCommissionAssociations.tx(
_token, _clientId, gwSerialString, r.id);
processCommissionData(r, res, res2);
});
}
}