问题1
在下面这段代码中,coroutineScope 不是多余的,它在这里是必要的。 你的理解中有一处关键混淆:suspend 函数的“等待”是协程内部的挂起,而 coroutineScope 的作用是为 launch/async 提供作用域并等待所有子协程完成。
问题二
在下面这段代码中 withContext(Dispatchers.IO)是不是多余了,delay本来就是suspend函数,本来在launch中就不会阻塞主线程。delay如果换成sleep效果是否还是相同?
lifecycleScope.launch(Dispatchers.Main){println("666-当前线程: ${Thread.currentThread().name}")// ① 主线程withContext(Dispatchers.IO){// ② 挂起,切到 IO 线程println("666-当前线程: ${Thread.currentThread().name}")// ③ IO 线程delay(500)// ④ IO 线程等待 500msprintln("666-网络请求结果: xxx")// ⑤ IO 线程}// ⑥ 切回主线程,恢复协程println("666-回到主线程: ...")// ⑦ 主线程}