Sobes.tech
Junior — Middle

Kan de uitvoering van een Coroutine in elke situatie worden onderbroken?

sobes.tech AI

Antwoord van AI

In Kotlin kan een coroutine niet onmiddellijk en zonder voorwaarden in elke situatie worden onderbroken. Voor correcte onderbreking moet de coroutine "coöperatief" zijn — dat wil zeggen, periodiek de status van annulering controleren en daarop reageren.

De onderbreking gebeurt via de aanroep van cancel(), maar als er binnen de coroutine blokkerende of langdurige code zonder onderbrekingspunten is (bijvoorbeeld een oneindige lus zonder controles), kan deze niet onmiddellijk worden onderbroken.

Daarom is het belangrijk om coroutines te schrijven die ondersteuning bieden voor annulering, door gebruik te maken van suspend-functies die zelf de annuleringstatus controleren of door handmatig isActive te controleren.

Voorbeeld:

launch {
    while (isActive) { // controle op annulering
        // werk
        delay(100) // suspend-functie die annulering ondersteunt
    }
}

Als de coroutine geen ondersteuning voor annulering heeft, zal het onderbreken moeilijk of onmogelijk zijn.