Sobes.tech
Middle+

Чӣ тавр шумо корутинро беэътибор намекунед?

sobes.tech AI

Ҷавоб аз AI

Для реализации неотменяемой корутины можно использовать контекст NonCancellable.

import kotlinx.coroutines.*

suspend fun performNonCancellableOperation() {
    coroutineScope {
        launch {
            // Эта корутина может быть отменена
            delay(1000)
            println("Эта корутина выполнена")
        }

        withContext(NonCancellable) {
            // Эта корутина не будет отменена, даже если ее родительский скоуп отменен
            try {
                delay(2000) // Имитация длительной операции
                println("Неотменяемая операция выполнена")
            } catch (e: CancellationException) {
                // Корутина все равно может получить CancellationException
                // в определенных случаях (например, при закрытии приложения),
                // но она не будет отменяться реактивно на отмену родителя.
                println("Неотменяемая операция была отменена: ${e.message}")
            } finally {
                // Этот блок выполнится даже при отмене
                println("Неотменяемая операция завершена (finally)")
            }
        }
    }
}