Size: a a a

2019 March 28

А

Андрей in Kotlin JVM
Алексей Овсянников
Честно говоря, я вообще подумал о том, что можно сделать скоуп и запускать в нем корутины на каждую задачу, просто в скоупе указать, что поток один (если нет прицела на мультиплатформу и не принципиально, чтобы задачки строго последовательно выполнялись)
Выполнение именно последовательное нужно
источник

АО

Алексей Овсянников in Kotlin JVM
Андрей
Выполнение именно последовательное нужно
тогда действительно актор с объектами-командами, возможно, самими умеющими что-то делать
источник

А

Андрей in Kotlin JVM
А ещё такой вопрос, например я захотел сделать приоритет задачам. То есть вытаскивать все, сортировать по приоритету, и последовательно исполнять. Позволяет ли канал такое делать?
источник

VP

Vladimir Petrakovich in Kotlin JVM
Андрей
А ещё такой вопрос, например я захотел сделать приоритет задачам. То есть вытаскивать все, сортировать по приоритету, и последовательно исполнять. Позволяет ли канал такое делать?
Смотрите в сторону select и раскидыванию задач с разным приоритетам по разным каналам
источник

AO

Alexey Otts in Kotlin JVM
Андрей
А ещё такой вопрос, например я захотел сделать приоритет задачам. То есть вытаскивать все, сортировать по приоритету, и последовательно исполнять. Позволяет ли канал такое делать?
По идеи можно сделать приоритетную очередь для екзекьютера
источник

А

Андрей in Kotlin JVM
Vladimir Petrakovich
Смотрите в сторону select и раскидыванию задач с разным приоритетам по разным каналам
А так точно получится сделать последовательное выполнение? Задачи работают с api, у которого есть лимит запросов в секунду
источник

А

Андрей in Kotlin JVM
Alexey Otts
По идеи можно сделать приоритетную очередь для екзекьютера
Не представляю, как это может выглядеть
источник

VP

Vladimir Petrakovich in Kotlin JVM
Андрей
А так точно получится сделать последовательное выполнение? Задачи работают с api, у которого есть лимит запросов в секунду
Если задачи выполняет одна корутина - да, всё будет последовательно.
А вообще вам скорее всего стоит почитать https://kotlinlang.org/docs/reference/coroutines/coroutines-guide.html
источник

А

Андрей in Kotlin JVM
Vladimir Petrakovich
Если задачи выполняет одна корутина - да, всё будет последовательно.
А вообще вам скорее всего стоит почитать https://kotlinlang.org/docs/reference/coroutines/coroutines-guide.html
Аа, все, въехал. То есть сделать набор каналов, для каждого приоритета, и последовательно читать?
источник

VP

Vladimir Petrakovich in Kotlin JVM
Андрей
Аа, все, въехал. То есть сделать набор каналов, для каждого приоритета, и последовательно читать?
источник

А

Андрей in Kotlin JVM
Не въехал, как оно будет работать. select это просто неблокирующее чтение? Если данных не будет ни на одном канале, моя корутина не уйдет в бесконечный цикл?
источник

AM

Andrew Mikhaylov in Kotlin JVM
Андрей
Не въехал, как оно будет работать. select это просто неблокирующее чтение? Если данных не будет ни на одном канале, моя корутина не уйдет в бесконечный цикл?
select саспендится, пока хотя бы в одном канале не появятся данные.
источник

AS

Andrey Sidorenko in Kotlin JVM
Кстати говоря о каналах и корутинах в принципе:
Каким образом можно реализовать следующую логику:
Считываем данные -> отправляем куда-либо пакет -> ошибка
В случае трех ошибок - delay на N времени
Но если пришли новые данные - delay сбрасывается
источник

AM

Andrew Mikhaylov in Kotlin JVM
Andrey Sidorenko
Кстати говоря о каналах и корутинах в принципе:
Каким образом можно реализовать следующую логику:
Считываем данные -> отправляем куда-либо пакет -> ошибка
В случае трех ошибок - delay на N времени
Но если пришли новые данные - delay сбрасывается
А за delay -- повтор трёх попыток, и так до бесконечности? Или как?
источник

AS

Andrey Sidorenko in Kotlin JVM
За delay совершение еще одной попытки. В случае успеха - счетчик попыток обнуляется и данные отправляются дальше до следующих трех ошибок. В случае ошибки - снова ожидание N времени

И так да, до бесконечности
источник

AM

Andrew Mikhaylov in Kotlin JVM
Andrey Sidorenko
За delay совершение еще одной попытки. В случае успеха - счетчик попыток обнуляется и данные отправляются дальше до следующих трех ошибок. В случае ошибки - снова ожидание N времени

И так да, до бесконечности
Т.е.
запрос с фейлом
запрос с фейлом
запрос с фейлом
задержка на N
запрос с фейлом
задержка на N
запрос с фейлом
задержка на N
запрос с успехом
И далее по кругу?
источник

AS

Andrey Sidorenko in Kotlin JVM
Да
источник

AM

Andrew Mikhaylov in Kotlin JVM
Я бы не городил огород и сделал exponential backoff, когда после каждого запроса есть задержка, но после повторных неудач задержка растёт до определённого лимита
источник

AM

Andrew Mikhaylov in Kotlin JVM
Логика чуть проще даже будет :)
источник

AS

Andrey Sidorenko in Kotlin JVM
Вероятно. Но если задержка, например, в минуту, только началась, и нам нужно прервать эту самую задержку, ибо пришли новые данные? Каким образом это можно правильно сделать?
источник