- suspend函数只能在CoroutineScope(协程作用域)中,或者另外一个suspend函数中调用;
- runBlocking会启动一个协程并且阻塞当前线程(即使是在另一个线程执行协程)直到其中的代码都执行;
- launch表示启动一个新的协程并且不阻塞当前线程;
- launch、runBlocking都不是suspend函数,runblocking不会等待非suspend函数;
- runBlocking不会等待非suspend函数;
- launch函数是CoroutineScope的方法,也就是说如果调用launch必须要有CoroutineScope对象;
- launch会返回一个Job对象,Job的join()是suspend函数,它的作用是挂起当前协程直到完成;
- async和launch类似,都是创建一个新的协程,async可以立即启动也可以惰性启动;
- async会返回一个Deferred对象,Deferred的await()会阻塞当前线程,等待计算结果并返回;
- withContext没有默认的调度器,必须指定一个协程调度器,效果类似于async{}.await()
- async适用于需要多次调用并且需要知道结果的场景,如多任务下载;withContext适用于不需要多次调用只需知道结果的场景,如网络请求
网友评论