KOTLIN_LIB Telegram 522
🧡 Kotlin Coroutines Π±Π΅Π· макияТа: Ρ‡Ρ‚ΠΎ скрываСтся ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ

Когда Π²Ρ‹ запускаСтС ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ launch ΠΈΠ»ΠΈ async, компилятор Kotlin создаёт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс Continuation. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит состояниС выполнСния ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΈ позволяСт Π΅ΠΉ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ хранятся всС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ тСкущая Ρ‚ΠΎΡ‡ΠΊΠ° выполнСния.

πŸ”„ Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹:
1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ launch ΠΈΠ»ΠΈ async.
2. Запуск β€” автоматичСски ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· start().
3. ΠŸΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° β€” ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ suspend -Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ delay() ΠΈΠ»ΠΈ await().
4. Π’ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ β€” послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ асинхронной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.
5. Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ β€” ΠΊΠΎΠ³Π΄Π° вСсь ΠΊΠΎΠ΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΈΠ»ΠΈ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π°.

🧠 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Continuation?

Continuation β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ состояниС выполнСния ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹. Он позволяСт ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, сохраняя ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π±Ρ‹Π»Π° приостановлСна. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Continuation выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


interface Continuation<in T> {
val context: CoroutineContext
fun resumeWith(result: Result<T>)
}


πŸ“Œ ΠŸΡ€ΠΈΠΌΠ΅Ρ€:


suspend fun mySuspendFunction() {
println("Start")
delay(1000)
println("End")
}

launch {
mySuspendFunction()
}


ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ этот ΠΊΠΎΠ΄ Π² класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


class GeneratedContinuation extends SuspendLambda {
int label;

@Override
Object invokeSuspend(Object result) {
switch (label) {
case 0:
println("Start");
label = 1;
if (delay(1000, this) == COROUTINE_SUSPENDED)
return COROUTINE_SUSPENDED;
case 1:
println("End");
return Unit.INSTANCE;
}
throw new IllegalStateException();
}
}


Π—Π΄Π΅ΡΡŒ label ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ выполнСния Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ suspend -Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ label измСняСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, с ΠΊΠ°ΠΊΠΎΠ³ΠΎ мСста Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ послС приостановки.

https://habr.com/ru/articles/882988/

✍️ @kotlin_lib
πŸ‘5



tgoop.com/kotlin_lib/522
Create:
Last Update:

🧡 Kotlin Coroutines Π±Π΅Π· макияТа: Ρ‡Ρ‚ΠΎ скрываСтся ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ

Когда Π²Ρ‹ запускаСтС ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ launch ΠΈΠ»ΠΈ async, компилятор Kotlin создаёт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс Continuation. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит состояниС выполнСния ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΈ позволяСт Π΅ΠΉ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ хранятся всС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ тСкущая Ρ‚ΠΎΡ‡ΠΊΠ° выполнСния.

πŸ”„ Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹:
1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ launch ΠΈΠ»ΠΈ async.
2. Запуск β€” автоматичСски ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· start().
3. ΠŸΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° β€” ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ suspend -Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ delay() ΠΈΠ»ΠΈ await().
4. Π’ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ β€” послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ асинхронной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.
5. Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ β€” ΠΊΠΎΠ³Π΄Π° вСсь ΠΊΠΎΠ΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΈΠ»ΠΈ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π°.

🧠 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Continuation?

Continuation β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ состояниС выполнСния ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹. Он позволяСт ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, сохраняя ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π±Ρ‹Π»Π° приостановлСна. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Continuation выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


interface Continuation<in T> {
val context: CoroutineContext
fun resumeWith(result: Result<T>)
}


πŸ“Œ ΠŸΡ€ΠΈΠΌΠ΅Ρ€:


suspend fun mySuspendFunction() {
println("Start")
delay(1000)
println("End")
}

launch {
mySuspendFunction()
}


ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ этот ΠΊΠΎΠ΄ Π² класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


class GeneratedContinuation extends SuspendLambda {
int label;

@Override
Object invokeSuspend(Object result) {
switch (label) {
case 0:
println("Start");
label = 1;
if (delay(1000, this) == COROUTINE_SUSPENDED)
return COROUTINE_SUSPENDED;
case 1:
println("End");
return Unit.INSTANCE;
}
throw new IllegalStateException();
}
}


Π—Π΄Π΅ΡΡŒ label ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ выполнСния Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ suspend -Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ label измСняСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, с ΠΊΠ°ΠΊΠΎΠ³ΠΎ мСста Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ послС приостановки.

https://habr.com/ru/articles/882988/

✍️ @kotlin_lib

BY Kotlin


Share with your friend now:
tgoop.com/kotlin_lib/522

View MORE
Open in Telegram


Telegram News

Date: |

To edit your name or bio, click the Menu icon and select β€œManage Channel.” Other crimes that the SUCK Channel incited under Ng’s watch included using corrosive chemicals to make explosives and causing grievous bodily harm with intent. The court also found Ng responsible for calling on people to assist protesters who clashed violently with police at several universities in November 2019. As the broader market downturn continues, yelling online has become the crypto trader’s latest coping mechanism after the rise of Goblintown Ethereum NFTs at the end of May and beginning of June, where holders made incoherent groaning sounds and role-played as urine-loving goblin creatures in late-night Twitter Spaces. Today, we will address Telegram channels and how to use them for maximum benefit. End-to-end encryption is an important feature in messaging, as it's the first step in protecting users from surveillance.
from us


Telegram Kotlin
FROM American