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

Как лучше всего подождать несколько колбеков и выполнить финальный блок?

25 ответов

12 просмотров

Правильно вопрос задайте, если есть код, то с примером, так непонятно что спрашиваете. Зачем вообще ждать 3 коллбэка для выполнения 4, это многопоточность?

Norim- Автор вопроса
Руслан Иваныкин
Правильно вопрос задайте, если есть код, то с при...

Пользователь нажал кнопку, загрузились данные, завершилась инициализация аналитики. Неизвестно в каком порядке это произойдет, но 4тый блок нужно выполнить только тогда когда завершены все 3 предыдущие. Вроде хорошо объяснил

Norim
Пользователь нажал кнопку, загрузились данные, зав...

Что используете для управления многопоточностью? RX, корутины, трэд пулл?

Norim
Корутины конечно

Ну а мы тут угадать должны. У корутин есть вызов через launch, а есть async, читайте теорию как это организовать, прям на сайте котлина можно читать

Norim- Автор вопроса
Руслан Иваныкин
Ну а мы тут угадать должны. У корутин есть вызов ч...

ни лаунч ни асинк не вернет результат с нажатия кнопки и завершения инициализации аналитики (аналитика колбек отдает)

Norim
ни лаунч ни асинк не вернет результат с нажатия кн...

Во, ещё какая - то аналитика. Не, сорри, я тут не помощник

Norim- Автор вопроса
Руслан Иваныкин
Во, ещё какая - то аналитика. Не, сорри, я тут не ...

Ну так я и написал 3 события, которые я жду: нажатие кнопки, колбек с аналитики, завершение загрузки. Прочитайте пожалуйста сообщение с которым я пришел, а не возмущайтесь на пустом месте

Norim
Ну так я и написал 3 события, которые я жду: нажат...

Вот тут ждут нескольких корутин: https://www.baeldung.com/kotlin/coroutines-waiting-for-multiple-threads

Norim- Автор вопроса
Leonid B.
Вот тут ждут нескольких корутин: https://www.baeld...

А как в них ждать инициализацию аналитики и нажатие кнопки? Ладно можно предположить, что аналитика статичная и на мейн диспатчере её ждать, но как с кнопкой?

Norim
А как в них ждать инициализацию аналитики и нажати...

Как вариант - ставить флаги, проверять их всех где-то в одном месте. Кто ж его знает, как там у вас всё организовано...

Norim- Автор вопроса
Leonid B.
Как вариант - ставить флаги, проверять их всех где...

Ну вот я собственно и пришел за возможно каким-то паттерном или подходом. То, что как-то так-то того-то я и сам знаю же, хотелось бы что-то конкретное

Norim- Автор вопроса
Leonid B.
Как вариант - ставить флаги, проверять их всех где...

С флагами будет проблема потому как могут сработать сразу 2 флага и тогда никогда 3 не сработают

Norim
Ну вот я собственно и пришел за возможно каким-то ...

Вы не это ищите ?) Не андройд, но все же ) https://metanit.com/kotlin/tutorial/8.2.php coroutineScope 😁

Norim
Ну вот я собственно и пришел за возможно каким-то ...

Можно вот еще как извратиться. Каждое завершенное действие увеличивает некий счетчик от 0 до N. Некий код ждет, когда счетчик достигнет нужного значения, чтобы продолжить. Т.е., если нужно ждать 3 события, значит нужно дождаться, когда счетчик будет равен 3.

Norim- Автор вопроса
Leonid B.
Можно вот еще как извратиться. Каждое завершенное...

Ну, тоже можно, но тогда наверное нужно, чтобы счетчик был атомарный а то мало ли с какого потока его будут увеличивать. Окей, попробую такое, спасибо

Norim
Ну, тоже можно, но тогда наверное нужно, чтобы сче...

Естественно, счетчик должен быть синхронизирован. В вашем случае неудобно то, что события происходят совершенно по-разному, а собрать их нужно в единое целое.

Norim
Ну, тоже можно, но тогда наверное нужно, чтобы сче...

https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.sync/-semaphore/index.html

Norim- Автор вопроса
Руслан Иваныкин
https://kotlin.github.io/kotlinx.coroutines/kotlin...

Мне же нужно не только счетчик но и реактивно на него реагировать

Norim
Мне же нужно не только счетчик но и реактивно на н...

Например, сделать в vm метод updateProgress и звать его откуда надо при завершении задачи. А это метод у себя внутри при выполнении нужного условия дёрнет LiveData или Flow какое-нибудь. Подписчик получит уведомление, все радуются.

suspendCoroutine

Norim- Автор вопроса
FlyBug
suspendCoroutine

Нажатие кнопки как я в ней ждать буду?

Norim
А как в них ждать инициализацию аналитики и нажати...

я делаю так, у тебя есть два события, которые ты хочешь дождаться, и после их свершения сделать что-то. создай две джобы (просто Job() в поля глобальные), назови их соответствующе, запусти где-нибудь корутину и в ней заджойнись к этим двум джобам (типа btnClickJob.join()), и после них код того действия заветного. при клике на кнопку btnClickJob.complete(), после инициализации аналитики analInitJob.complete(). готово

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта