169 похожих чатов

Подскажите, как корректно разрулить следующую ситуацию с корутинами. Есть утилка,

которая выполняет некоторую джобу с делэем, если другая такая же не выполняется. Эта утилка вызывается на определенные действия пользователя, а также рекурсивно после выполнения предыдущей.

if (!job.isActive) {
job = scope.launch {
delay(delayMs)
action()
}
}

В конце тела action-а я хочу рекурсивно запустить следующий таймер, то есть вызываю эту утилку ещё раз, но в таком случае проверка !job.isActive не пройдёт, поскольку action ещё не завершился. Как мне добиться желаемого результата?

7 ответов

23 просмотра

Так делайте не в рекурсии а в цикле 😊

Kamo-Spertsyan Автор вопроса
Kamo Spertsyan
Каким образом? Не очень понял

if (!job.isActive) { job = scope.launch { (1..10).forEach { delay(delayMs) action() } } } 😊

Kamo-Spertsyan Автор вопроса
Ерлан Ибраев
if (!job.isActive) { job = scope.launch { ...

Это могло бы сработать, если бы утилка не была обособленным компонентом. Я не хочу в неё цикл добавлять

Kamo Spertsyan
Это могло бы сработать, если бы утилка не была обо...

Ну в любом случае рекурсию можно развернуть в цикл. А так, есть предположение, что вы решаете не ту задачу. Попробуйте её переформулировать. Т.к. в текущем виде она звучит, как минимум странно.

Kamo-Spertsyan Автор вопроса
Ерлан Ибраев
Ну в любом случае рекурсию можно развернуть в цикл...

Я попытался максимально абстрактно её описать) В моём кейсе цикл не прокатит потому, что тело выполняется в одном компоненте, а delay выставляется в другом. Сейчас обмозгую возможность чуть выше цикл присобачить) Спасибо в любом случае за идею)

Kamo Spertsyan
Я попытался максимально абстрактно её описать) В м...

Да. Скорее всего введение дополнительного слоя абстракции поможет. 😊

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта