KOTLIN_LIB Telegram 527
Объяснение отмены корутин в Kotlin

Kotlin корутины предоставляют удобный способ асинхронного программирования. Но с этим удобством приходит и необходимость понять, как работает отмена. Давайте разберемся, как именно происходит отмена корутин и что это означает для вашего кода.

Что происходит при отмене?

Когда Job отменяется, он переводится в состояние "отменено", но фактически корутина не завершится мгновенно. Она завершится, когда достигнет "точки отмены" (cancellation point). Это может быть:
- Вызов delay, yield и других suspend-функций, проверяющих isActive.
- Явная проверка coroutineContext.isActive или вызов ensureActive().

Пример:


launch {
repeat(1000) { i ->
println("I'm sleeping $i ...")
delay(500L)
}
}


Если вы вызовете cancel() на этой корутине, она остановится только после следующего delay.

Отмена и finally

try/finally блоки работают в корутинах, как и ожидалось. Однако, если вы используете delay или другую suspend-функцию в finally, она тоже может быть отменена. Чтобы избежать этого, используйте withContext(NonCancellable):


try {
// работа
} finally {
withContext(NonCancellable) {
// гарантированно выполнится
}
}


Пример отмены


val job = launch {
try {
repeat(1000) { i ->
println("Job: I'm sleeping $i ...")
delay(500L)
}
} finally {
println("Job: I'm running finally")
}
}
delay(1300L) // немного подождем
println("main: I'm tired of waiting!")
job.cancelAndJoin() // отмена и ожидание завершения
println("main: Now I can quit.")


Вывод:

Job: I'm sleeping 0 ...
Job: I'm sleeping 1 ...
Job: I'm sleeping 2 ...
main: I'm tired of waiting!
Job: I'm running finally
main: Now I can quit.


Как видно, finally выполнится при отмене, но если в нем будет suspend-функция — нужно быть осторожным.

Заключение

Понимание механизма отмены корутин — важная часть работы с асинхронным кодом в Kotlin. Отмена не означает мгновенное завершение — корутина завершится в точке отмены. Используйте NonCancellable, если нужно завершить работу "честно", несмотря на отмену.

https://sam-cooper.medium.com/kotlin-coroutine-cancellation-explained-6a545c8da252

✍️ @kotlin_lib
👍3



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

Объяснение отмены корутин в Kotlin

Kotlin корутины предоставляют удобный способ асинхронного программирования. Но с этим удобством приходит и необходимость понять, как работает отмена. Давайте разберемся, как именно происходит отмена корутин и что это означает для вашего кода.

Что происходит при отмене?

Когда Job отменяется, он переводится в состояние "отменено", но фактически корутина не завершится мгновенно. Она завершится, когда достигнет "точки отмены" (cancellation point). Это может быть:
- Вызов delay, yield и других suspend-функций, проверяющих isActive.
- Явная проверка coroutineContext.isActive или вызов ensureActive().

Пример:


launch {
repeat(1000) { i ->
println("I'm sleeping $i ...")
delay(500L)
}
}


Если вы вызовете cancel() на этой корутине, она остановится только после следующего delay.

Отмена и finally

try/finally блоки работают в корутинах, как и ожидалось. Однако, если вы используете delay или другую suspend-функцию в finally, она тоже может быть отменена. Чтобы избежать этого, используйте withContext(NonCancellable):


try {
// работа
} finally {
withContext(NonCancellable) {
// гарантированно выполнится
}
}


Пример отмены


val job = launch {
try {
repeat(1000) { i ->
println("Job: I'm sleeping $i ...")
delay(500L)
}
} finally {
println("Job: I'm running finally")
}
}
delay(1300L) // немного подождем
println("main: I'm tired of waiting!")
job.cancelAndJoin() // отмена и ожидание завершения
println("main: Now I can quit.")


Вывод:

Job: I'm sleeping 0 ...
Job: I'm sleeping 1 ...
Job: I'm sleeping 2 ...
main: I'm tired of waiting!
Job: I'm running finally
main: Now I can quit.


Как видно, finally выполнится при отмене, но если в нем будет suspend-функция — нужно быть осторожным.

Заключение

Понимание механизма отмены корутин — важная часть работы с асинхронным кодом в Kotlin. Отмена не означает мгновенное завершение — корутина завершится в точке отмены. Используйте NonCancellable, если нужно завершить работу "честно", несмотря на отмену.

https://sam-cooper.medium.com/kotlin-coroutine-cancellation-explained-6a545c8da252

✍️ @kotlin_lib

BY Kotlin




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

View MORE
Open in Telegram


Telegram News

Date: |

With the sharp downturn in the crypto market, yelling has become a coping mechanism for many crypto traders. This screaming therapy became popular after the surge of Goblintown Ethereum NFTs at the end of May or early June. Here, holders made incoherent groaning sounds in late-night Twitter spaces. They also role-played as urine-loving Goblin creatures. Image: Telegram. A few years ago, you had to use a special bot to run a poll on Telegram. Now you can easily do that yourself in two clicks. Hit the Menu icon and select “Create Poll.” Write your question and add up to 10 options. Running polls is a powerful strategy for getting feedback from your audience. If you’re considering the possibility of modifying your channel in any way, be sure to ask your subscribers’ opinions first. bank east asia october 20 kowloon On Tuesday, some local media outlets included Sing Tao Daily cited sources as saying the Hong Kong government was considering restricting access to Telegram. Privacy Commissioner for Personal Data Ada Chung told to the Legislative Council on Monday that government officials, police and lawmakers remain the targets of “doxxing” despite a privacy law amendment last year that criminalised the malicious disclosure of personal information.
from us


Telegram Kotlin
FROM American