Ich lese Kotlin Coroutine und weiß, dass es auf suspend
Funktion basiert . Aber was heißt suspend
das?
Coroutine oder Funktion wird ausgesetzt?
Von https://kotlinlang.org/docs/reference/coroutines.html
Grundsätzlich sind Coroutinen Berechnungen, die angehalten werden können, ohne einen Thread zu blockieren
Ich hörte Leute oft sagen "Funktion aussetzen". Aber ich denke, es ist die Coroutine, die suspendiert wird, weil sie darauf wartet, dass die Funktion beendet ist? "suspendieren" bedeutet normalerweise "Betrieb einstellen", in diesem Fall ist die Coroutine inaktiv.
🤔 Sollen wir sagen, dass die Coroutine ausgesetzt ist?
Welche Coroutine wird suspendiert?
Von https://kotlinlang.org/docs/reference/coroutines.html
Um die Analogie fortzusetzen, kann await () eine Suspendierungsfunktion sein (daher auch innerhalb eines asynchronen {} Blocks aufrufbar), die eine Coroutine suspendiert, bis eine Berechnung abgeschlossen ist und ihr Ergebnis zurückgibt:
async { // Here I call it the outer async coroutine
...
// Here I call computation the inner coroutine
val result = computation.await()
...
}
🤔 Es heißt "das setzt eine Coroutine aus, bis eine Berechnung abgeschlossen ist", aber Coroutine ist wie ein leichter Thread. Wie kann die Berechnung durchgeführt werden, wenn die Coroutine ausgesetzt ist?
Wir sehen , dass es await
aufgerufen wird computation
, also könnte es sein, async
dass es zurückkehrt Deferred
, was bedeutet, dass es eine andere Coroutine starten kann
fun computation(): Deferred<Boolean> {
return async {
true
}
}
🤔 Das Zitat besagt, dass eine Coroutine suspendiert wird . Bedeutet es suspend
die äußere async
oder suspend
die innere Koroutine?computation
Coroutine?
Ist suspend
bedeuten , dass während äußere async
Koroutine wird (Warte await
) für den inneren computation
Koroutine bis Ende, es (das äußere async
Koroutine) idles (daher der Name suspendieren) und kehrt Thread zu dem Thread - Pool, und wenn das Kind computation
Koroutine beendet, es (das äußere async
Koroutine ) wacht auf, nimmt einen weiteren Thread aus dem Pool und fährt fort?
Der Grund, warum ich den Thread erwähne, ist https://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.html
Der Thread wird an den Pool zurückgegeben, während die Coroutine wartet, und wenn das Warten beendet ist, wird die Coroutine an einem freien Thread im Pool fortgesetzt