Kotlin协程的创建方式

 

kotlin协程的创建方式 

runBlocking{...}

创建新的协程,运行在当前线程上,所以会堵塞当前线程,

直到协程体结束;但是这个runBlocking域中可以有多个协程,

多个协程可以并发进行,不会等待子协程执行结束

用于启动一个协程任务,通常只用于启动最外层的协程,

例如线程环境切换到协程环境

GlobalSocpe.launch{...}

启动一个新的线程,在新线程上创建运行协程,

不堵塞当前线程

需要启动异步线程处理的情况
CoroutineScope(Dispathcer.xxx).{...} 在指定类型的线程中创建协程,不会阻塞所运行的线程  

 

1.GlobalScope.launch

val job = GlobalScope.launch { 
// 启动一个非阻塞的协程,并返回了job
    println("World!")
}

launch启动协程后返回一个Job代表当前协程的句柄,取消协程job.cancel(),cancel()会取消所有的子协程,子协程通过Job.attachChild关联到父协程的Job,通过Job可以管理协程的生命周期。

GlobalScope.launch(Dispatchers.IO) {
            println("hello");
        }

通过launch可以直接通过调度器Dispatchers来指定协程运行的线程,调度器可以指定的线程有

Dispatchers.Main:协程运行在主线程
Dispatchers.IO:协程运行在IO线程
Dispatchers. Default:协程运行在共享线程
Dispatcher.UnConfined:在父协程的线程中运行

2.GlobalScope.async

GlobalScope.async {
            println("hello")
        }

和launch一样,区别是返回一个Job的子类 Deferred,async可以在协程体中自定义返回值,并且通过Deferred.await堵塞当前线程等待接收async协程返回的类型。特别是需要启动异步线程处理并等待处理结果返回的场景

你可能感兴趣的:(android)