Size: a a a

Kotlin Community

2020 December 18

I

Igor in Kotlin Community
я ж уже писал в чем смысл, столкнулся с таким поведением, решил разобраться, ПОЧЕМУ. (рассценивай как спортивный интерес)
там же не в 200 миллискунд дело, а в том, что суспенд функция не вернет значения в return пока не завершится блок внутри scope3
источник

AL

Anton Lakotka in Kotlin Community
она возвращает. помести println(res) внутрь async
источник

AL

Anton Lakotka in Kotlin Community
> столкнулся с таким поведением,
если у вас рабочий код написан так как в примерах, то беда. очень тяжело разбираться в таком.
лучше всего не нарушать Structural Concurrency.
источник

I

Igor in Kotlin Community
Anton Lakotka
она возвращает. помести println(res) внутрь async
👍
источник

I

Igor in Kotlin Community
фух… разобрался… спасибо
источник

I

Igor in Kotlin Community
Ну и с хендлером остался вопрос:
coroutineContext[CoroutineExceptionHandler]  //возвращает null, но хендлер там есть
источник

I

Igor in Kotlin Community
Пример тот-же
val handler = CoroutineExceptionHandler { _, exception ->
           println("CoroutineExceptionHandler got $exception")
 }
val scope = CoroutineScope(SupervisorJob())
val scope2 = CoroutineScope(Job())

suspend fun criticalSectionSuspending(): String {
  println("Starting!")
   val handler1 = coroutineContext[CoroutineExceptionHandler] ?: throw Exception("Empty Handler")
    val scope3 = CoroutineScope( handler1)
    val someJob = scope3.launch {
           delay(200)
                   println("Delay!")
                   throw Exception("Delay exception")
           }
   return "Result"
}
fun main() {
 scope.launch(handler) {
   val res =  scope2.async{
    val r = criticalSectionSuspending()
     println(r)
    return@async r
   }.await()
    println(res)
 }
 Thread.sleep(500)
}
источник

I

Igor in Kotlin Community
Exception("Empty Handler")  отлавливается в handler…
источник

I

Igor in Kotlin Community
значит корутина с хендлером… но в контексте его нет…
источник

I

Igor in Kotlin Community
вот как где? где я упускаю?
источник

I

Igor in Kotlin Community
Ну, вроде как понятно, что coroutineContext в примере, это scope2,  у него хендлера нет.
А Exception("Empty Handler") отправляется на верх, в scope где и ловится…

Получается, что в данном случае CoroutineExceptionHandler не получить вообще из контекста корутины?
источник

RI

Ruslan Ibragimov in Kotlin Community
Вот тут contains автодополнится как collection.contains {}, что норм для каких-нибудь билдеров, но вообще не то что ожидаешь в данном случае, т.к. явно хочется передать какой-то инстанс, чтобы он по ссылке внутри сравнивался (у нас же функциональный тип тут). Так вот, как IDE может отличить эти два случая? Я придумал только аннотации расставлять: @IgnoreTrailingFunctionalType, но может у вас идеи получше есть https://youtrack.jetbrains.com/issue/KT-43991
источник

RI

Ruslan Ibragimov in Kotlin Community
Igor
Ну, вроде как понятно, что coroutineContext в примере, это scope2,  у него хендлера нет.
А Exception("Empty Handler") отправляется на верх, в scope где и ловится…

Получается, что в данном случае CoroutineExceptionHandler не получить вообще из контекста корутины?
Явно создали новый скоуп (scope2), который не наследует никак parent (scope) скоуп, соответсвенно элементы (тот же CoroutineExceptionHandler) никак не могут попасть из одного скоупа в другой
источник

AE

Alexandr Emelyanov in Kotlin Community
モリモト
Ребят привет
Я недавно решил в котлин перекатиться, очень уж понравился синтаксис.
Хотел бы узнать о нем кое что:
- Разработка чего на котлине наиболее востребована( полагаю что приложения на андроид )
- Делают ли на нем бэкэнд и насколько это часто встречается
- Какие фремворки/либы маст хэв
- Есть ли смысл знать только котлин( принцип работы jvm не в счет ) или стоит еще подучить еще и яву


Тем кто решит ответить заранее спасибо за ваш ответ
Смотреть на опрос, что больше пишут, но писать то, что нравится
источник

AY

Axrorxo'ja Yodgorov in Kotlin Community
В этом чате был дисказ про pass by reference, pass by value    как в котлине и жаве
может кто нибудь скинуть ссылку?
источник

PE

Pavel Erokhin in Kotlin Community
Axrorxo'ja Yodgorov
В этом чате был дисказ про pass by reference, pass by value    как в котлине и жаве
может кто нибудь скинуть ссылку?
был, воспользуйся поиском по чату
источник

AY

Axrorxo'ja Yodgorov in Kotlin Community
Pavel Erokhin
был, воспользуйся поиском по чату
не нашло а то не спросил бы
источник

PE

Pavel Erokhin in Kotlin Community
Axrorxo'ja Yodgorov
не нашло а то не спросил бы
А вот я нашел), вот начиная от сообщения Andrew и ниже\выше
источник

AY

Axrorxo'ja Yodgorov in Kotlin Community
Pavel Erokhin
А вот я нашел), вот начиная от сообщения Andrew и ниже\выше
большое спасибо 💪💪💪💪
источник

I

Ilmir in Kotlin Community
Sergey Morgunov
Друзья, никто не сталкивался с таким. Выношу inline extension-функцию из кода модуля в отдельную библиотеку и код модуля перестаёт компилироваться 😞
Компилятор ругаться начинает
[ERROR] Caused by: java.lang.IllegalStateException: Couldn't obtain compiled function body for …

В трекере что-то не могу найти багу с таким же описанием, а в то, что я первый, как-то с трудом верится 😀
Функция:

suspend inline fun <M, RES> EntityRef<M>.ask(timeout: Duration, noinline message: (ActorRef<RES>) -> M): RES = this.ask(message, timeout).await()
Очень похоже на баг на стыке инлайн классов, корутин и инлайнера. Как workaround, можно Duration заменить обычным классом, не инлайн.
источник