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

17 просмотров

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

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

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

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

тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
читать файл максимально быстро? странный вопрос))
zamtmn
53
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
или вы считаете муит дает знание?
супер_лох_3000 альфа версия
12
значить например он учился в СДУ то получается он особенный?)
Asets Serikov
11
А кто такой мужчина в твоем понимании Азиз?
who?です 🐈
11
Карта сайта