Честно говоря, я вообще подумал о том, что можно сделать скоуп и запускать в нем корутины на каждую задачу, просто в скоупе указать, что поток один (если нет прицела на мультиплатформу и не принципиально, чтобы задачки строго последовательно выполнялись)
А ещё такой вопрос, например я захотел сделать приоритет задачам. То есть вытаскивать все, сортировать по приоритету, и последовательно исполнять. Позволяет ли канал такое делать?
А ещё такой вопрос, например я захотел сделать приоритет задачам. То есть вытаскивать все, сортировать по приоритету, и последовательно исполнять. Позволяет ли канал такое делать?
Смотрите в сторону select и раскидыванию задач с разным приоритетам по разным каналам
А ещё такой вопрос, например я захотел сделать приоритет задачам. То есть вытаскивать все, сортировать по приоритету, и последовательно исполнять. Позволяет ли канал такое делать?
По идеи можно сделать приоритетную очередь для екзекьютера
Не въехал, как оно будет работать. select это просто неблокирующее чтение? Если данных не будет ни на одном канале, моя корутина не уйдет в бесконечный цикл?
Не въехал, как оно будет работать. select это просто неблокирующее чтение? Если данных не будет ни на одном канале, моя корутина не уйдет в бесконечный цикл?
select саспендится, пока хотя бы в одном канале не появятся данные.
Кстати говоря о каналах и корутинах в принципе: Каким образом можно реализовать следующую логику: Считываем данные -> отправляем куда-либо пакет -> ошибка В случае трех ошибок - delay на N времени Но если пришли новые данные - delay сбрасывается
Кстати говоря о каналах и корутинах в принципе: Каким образом можно реализовать следующую логику: Считываем данные -> отправляем куда-либо пакет -> ошибка В случае трех ошибок - delay на N времени Но если пришли новые данные - delay сбрасывается
А за delay -- повтор трёх попыток, и так до бесконечности? Или как?
За delay совершение еще одной попытки. В случае успеха - счетчик попыток обнуляется и данные отправляются дальше до следующих трех ошибок. В случае ошибки - снова ожидание N времени
За delay совершение еще одной попытки. В случае успеха - счетчик попыток обнуляется и данные отправляются дальше до следующих трех ошибок. В случае ошибки - снова ожидание N времени
И так да, до бесконечности
Т.е. запрос с фейлом запрос с фейлом запрос с фейлом задержка на N запрос с фейлом задержка на N запрос с фейлом задержка на N запрос с успехом И далее по кругу?
Я бы не городил огород и сделал exponential backoff, когда после каждого запроса есть задержка, но после повторных неудач задержка растёт до определённого лимита
Вероятно. Но если задержка, например, в минуту, только началась, и нам нужно прервать эту самую задержку, ибо пришли новые данные? Каким образом это можно правильно сделать?