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 ответов

48 просмотров

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мс вызываетс...

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта