Итак
Я создал несколько функций приостановки в своей сопрограмме
Код: Выделить всё
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
Мобильная версия