Size: a a a

2019 November 09

AN

Alexander Nozik in Kotlin Moscow
Потомки не роняют предка, но если предок закрыт, потомки не утекают
источник

AN

Alexander Nozik in Kotlin Moscow
Sergey Morgunov
Есть функция с такой сигнатурой (сигнатуру менять нельзя):
fun method(): ServiceCall<Requst, Response>

Задача: заиметь возможность вызывать suspend функции внутри этого метода.
Поэтому и написали билдер, что выше скинул. Теперь вот так
fun method(): ServiceCall<Requst, Response> = serviceCall {
 // this I can call suspend method
}

Если serviceCall будет как CoroutineScope.serviceCall, то как мне его вызывать, если класс, который содержит method совсем не CoroutineScope 🙁
Явно притащить. scope.seriviceCall(...)
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Alexander Nozik
Ну если там суперивизоры проложены почему нет?
Ну так можно конечно, но где в том примере SupervisorJob?
источник

AN

Alexander Nozik in Kotlin Moscow
Ruslan Ibragimov
Ну так можно конечно, но где в том примере SupervisorJob?
supervisorScope{ serviceCall(...)}
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Я думал мы про этот пример говорим https://t.me/KotlinMoscow/5917
источник

AN

Alexander Nozik in Kotlin Moscow
Не, если один скоуп на все приложение, то нормально. Но я бы все равно сделал val scope = GlobalScope.coroutineScope() или как там пустой дочерний скоуп создается
источник

SM

Sergey Morgunov in Kotlin Moscow
Alexander Nozik
Явно притащить. scope.seriviceCall(...)
Возвращаюсь к вопросу откуда взять scope? Сделать свойством класса и в конструкторе инициализировать один раз? Учитывая, что method это хендлер отдельного HTTP запроса, и я пока не могу осознать зачем мне нужен единый скоуп для независимых запросов. Как-то это контринтуитивно для меня пока.
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Sergey Morgunov
Возвращаюсь к вопросу откуда взять scope? Сделать свойством класса и в конструкторе инициализировать один раз? Учитывая, что method это хендлер отдельного HTTP запроса, и я пока не могу осознать зачем мне нужен единый скоуп для независимых запросов. Как-то это контринтуитивно для меня пока.
Если ли какая-то сущность выше по стеку которая делает сервис колы и может упасть/отмениться?
источник

AN

Alexander Nozik in Kotlin Moscow
Sergey Morgunov
Возвращаюсь к вопросу откуда взять scope? Сделать свойством класса и в конструкторе инициализировать один раз? Учитывая, что method это хендлер отдельного HTTP запроса, и я пока не могу осознать зачем мне нужен единый скоуп для независимых запросов. Как-то это контринтуитивно для меня пока.
источник

AN

Alexander Nozik in Kotlin Moscow
Ruslan Ibragimov
Если ли какая-то сущность выше по стеку которая делает сервис колы и может упасть/отмениться?
правильный вопрос
источник

SM

Sergey Morgunov in Kotlin Moscow
Так не один раз уже прочитал. И вторую его статью на тему Global и structured concurrency. Видимо пока не до конца зашло 🙂
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Alexander Nozik
Потомки не роняют предка, но если предок закрыт, потомки не утекают
Кстати я что-то пропустил момент что в SupervisorJob потомки не убивают предка, спасибо, буду знать.
источник

AN

Alexander Nozik in Kotlin Moscow
Sergey Morgunov
Так не один раз уже прочитал. И вторую его статью на тему Global и structured concurrency. Видимо пока не до конца зашло 🙂
Руслан правильный вопрос задал. Надо мыслить структурно. Надо смотреть, какая задача вызывает функцию и кто ее контролирует
источник

SM

Sergey Morgunov in Kotlin Moscow
Ruslan Ibragimov
Если ли какая-то сущность выше по стеку которая делает сервис колы и может упасть/отмениться?
По идее нет. Это базовый класс сервиса (аля контроллер) с которого всё начинается. Точнее внутри у фреймворка там конечно начинается гораздо раньше, но для обычного разработчика это точка старта
источник

AN

Alexander Nozik in Kotlin Moscow
Sergey Morgunov
По идее нет. Это базовый класс сервиса (аля контроллер) с которого всё начинается. Точнее внутри у фреймворка там конечно начинается гораздо раньше, но для обычного разработчика это точка старта
Может приложение закрыться пока эта штука работает?
источник

SM

Sergey Morgunov in Kotlin Moscow
Alexander Nozik
Может приложение закрыться пока эта штука работает?
Если рассматривать грейсфул, то по идее нет. В рамках шатдауна остановка начинается именна с него, а потом останавливаются уже какие-то низкоуровневые компоненты типа коннекторов к ресурсам, в конце концов даунится кластер и потом приложений завершается
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Ну скорее всего запрос может упасть по таймауту, т.е. в скоупе запроса нужно создать скоуп для корутин.
источник

AN

Alexander Nozik in Kotlin Moscow
Sergey Morgunov
Если рассматривать грейсфул, то по идее нет. В рамках шатдауна остановка начинается именна с него, а потом останавливаются уже какие-то низкоуровневые компоненты типа коннекторов к ресурсам, в конце концов даунится кластер и потом приложений завершается
Просто структурная кокуррентность как раз про это. Если где-то что-то закрывается извне, то процесс без предка утекает и лучше, чтобы был предок, который автоматом закроет все запросы. Опять же, это не догма.
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Если старые добрые сервлеты то это фильтр который кладет скоуп в тред локал. Если новые flux то там есть контекст для этого
источник

SM

Sergey Morgunov in Kotlin Moscow
Ruslan Ibragimov
Если старые добрые сервлеты то это фильтр который кладет скоуп в тред локал. Если новые flux то там есть контекст для этого
Отличная идея свети к сервлетам 🙂 Если я положу скоуп в контекст запроса, то что мне это даст? Вместе со смертью запроса (предположим это объект класса HTTPServletRequest) умрёт  CoroutineScope, что приведёт к отмене всех привязанных к этому скоупу корутин? Я верно понял?
источник