Какой компонент сопрограмм выполняет функции приостановкиAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Какой компонент сопрограмм выполняет функции приостановки

Сообщение Anonymous »

Недавно я пытался выяснить, кто на самом деле несет ответственность за выполнение функций приостановки
Итак
Я создал несколько функций приостановки в своей сопрограмме

Код: Выделить всё

fun main(args: Array) {

for (x in 1..20){
CoroutineScope(Dispatchers.Default).launch{
for (i in 1..5) {
if(i % 2 == 0){
myFun(i, Thread.currentThread().name)
}else{
myFun2(i, Thread.currentThread().name)
}
}
}
}

Thread.sleep(3000000)  //this is just to wait for all coroutines to complete, ignore it

Код: Выделить всё

suspend fun myFun(n : Int, tName : String) {
println("myFun method called from Thread = $tName, for i = $n")
println("myFun -> executing on Thread = ${Thread.currentThread().name}, came from Thread = $tName")
delay(1000)
val x = n * n;
println("myFun -> performing square operation on Thread = ${Thread.currentThread().name}, for i = $n came from Thread = $tName")

myFun3(x, Thread.currentThread().name, tName);
println("myFun method finished for i = $n, on Thread = ${Thread.currentThread().name} came from Thread = $tName")
}

suspend fun myFun2(n : Int, tName: String){
println("myFun2 method called from Thread = $tName, for i = $n")
println("myFun2 -> executing on Thread = ${Thread.currentThread().name} came from Thread = $tName")
delay(1000)
val x = n * n * n;
println("myFun2 -> performing cube operation on Thread = ${Thread.currentThread().name} for i = $n came from Thread = $tName")
myFun3(x, Thread.currentThread().name, tName);
println("myFun2 method finished for i = $n, on Thread = ${Thread.currentThread().name}, came from Thread = $tName")
}

suspend fun myFun3(n : Int, parentFunThread : String, cThread: String){
if(!fun3Thread.equals(parentFunThread) || !fun3Thread.equals(cThread) || !parentFunThread.equals(cThread)){
println("--------------------------------------------Found-------------------------")
}
println("myFun3 method called from Thread = $parentFunThread, for x = $n through coroutineThread = $cThread")
println("myFun3 -> executing on Thread = $fun3Thread, came from Thread = $parentFunThread, coroutineThread = $cThread")
println("myFun3 -> final value of x = $n onThread = $fun3Thread, came from Thread = $parentFunThread, coroutineThread = $cThread")
println("myFun3 method finished for x = $n, on Thread = $fun3Thread, came from Thread = $parentFunThread, coroutineThread = $cThread")
}
Поскольку я создал эти функции приостановки самостоятельно, их выполнение было довольно простым, как и у обычных функций. Они не вели себя как (приостановка текущей сопрограммы, отсоединение сопрограммы от базового потока: создание поток доступен для других сопрограмм)
Все они выполнялись в том же потоке, в котором они были вызваны.
Базовые потоки переключались, когда я вызывал встроенные suspend function(delay(1000)) в моих функциях приостановки результаты были разными.
Поскольку существует несколько способов приостановки функций, таких как (метод вызова API в модернизации, функция запроса к базе данных комнаты и функцию задержки, как здесь)
Мой вопрос: какой компонент Android выполняет эти функции приостановки?
Заранее спасибо.`

Подробнее здесь: https://stackoverflow.com/questions/791 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»