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

Всем привет, подскажите, пожалуйста, я вот написал вот такую конструкцию,

можно ли ее как-то сократить (Я к тому, может у корутин есть какой-то функционал специально под такие проблемы? Просто не могу сформулировать его, чтобы загуглить)

private var getConfigurationJob: Deferred<Configuration>? = null

suspend fun getConfiguration(): Configuration {
val currentJob = getConfigurationJob
val job = if(currentJob != null && currentJob.isCompleted.not()) {
currentJob
} else {
coroutineScope.async {
// Тут таска, которая делает запрос к серверу
}.also {
getConfigurationJob = it
}
}
return job.await()
}

15 ответов

52 просмотра

await(CoroutineStart.LAZY)? правда, оно не перезапускаеться при завершении

Kostya-M Автор вопроса
Vadym Yaroshchuk
await(CoroutineStart.LAZY)? правда, оно не перезап...

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

Kostya M
Спасибо за ответ, штука кстати прикольная, но наск...

у вас конфигурация получается единожды или по несколько раз?

coroutineScope.async - беcсмыслено в данном коде, если конечно coroutineScope не специфический. А так делать async и сразу await - бессмысленно

Kostya-M Автор вопроса
Kostya M
Почему? Если мне нужен Deferred рычаг

по факту вы выполняете последовательное выполнения

Kostya-M Автор вопроса
Bohdan Panchenko
а зачем он вам ?

Допустим данная функция с разницей в 1мс вызывается из 2х мест. При первом вызове у меня происходит запрос на сервер. При втором вызове я не хочу делать повторный запрос на сервер, так как результат первого запроса еще не вернулся и для обоих вызывающих я хочу вернуть 1н результат

Kostya M
Допустим данная функция с разницей в 1мс вызываетс...

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

Kostya-M Автор вопроса
Bohdan Panchenko
ага, то-есть вам нужен мулти вызов, но звать два р...

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

Kostya-M Автор вопроса
Bohdan Panchenko
ага, то-есть вам нужен мулти вызов, но звать два р...

Хотя нет. Как сказал Вадим, тут действительно - это просто поможет избавиться от конкурентных вызовов, но не объединит их в один, а просто выполнит последовательнео - мне это, к сожалению, не годится

Bohdan Panchenko
https://pl.kotl.in/LSgoWRdT2

PS да если делать последовательный запуск - то будет вызов два (N) раза

Kostya M
Допустим данная функция с разницей в 1мс вызываетс...

поставьте время кеширования, используйте мьютекс == профит

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

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

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