launch是最常用的启动协程方式,它会立即返回一个Job对象,后台执行协程任务如果在启动协程时使用了try-catch,那么异常会被try-catch块捕获。如果没有捕获,异常会传递给未捕获异常处理器进行处理 应用场景:如果需要启动一个独立协程,并且不关心其结果或异常,最好使用launch。 示例: fun main() { GlobalSc
通过上面的测试,我们可以得出结论,launch函数和async函数启动的协程是并行执行的,并且启动协程之后会立马往下执行,不会等待协程完成,除非调用join或await函数。launch函数和async函数的唯一区别就是async函数启动的协程有返回值,如果不需要获取协程的执行结果,那么没必要用async函数。 4.withContext函数的作用 官方框架中还为...
launch: 启动一个新的协程。类似于射箭程,一旦被 launch,那么它当中执行的任务也不会被中途改变。即使有了结果,也没办法直接返回给调用方 async: 启动一个新的协程并返回一个Deferred对象,可以用来获取计算的结果。类似于钓鱼,一旦有鱼儿上钩了,我们就可以直接拿到结果 Coroutine Scopes CoroutineScope定义了协程的生命...
让我们使用 async-await 并行运行这两个任务,然后使用 withcontext 来看看两者之间的区别。 // kotlin function using asyncfun startLongRunningTaskInParallel(){viewModelScope.launch{val resultOneDeferred = async { TaskOne() }val resultTwoDeferred = async { TaskTwo() }val combinedResult = resultOneDeferr...
suspend:申明这是个可挂起的函数,里面可以用协程的一下方法(launch()、async()、withContext()等)。 如果切换线程中的代码很多,想把(withContext(){...})的代码抽出来。于是写成这样 代码语言:javascript 代码运行次数:0 运行 AI代码解释 fun getToken(): String { return withContext(Dispatchers.Default) { ...
kotlin之协程(二),Kotlin协程是什么、挂起是什么、挂起的非阻塞式 kotlin之协程(三),开始创建协程,launch,withContext kotlin之协程(四),协程的核心关键字suspend kotlin之协程(五),launch 函数以及协程的取消与超时 kotlin之协程(七),协程中relay、yield 区别 launch 函数定义:async 函数定义:从源码可以...
//launch 表示开启一个协程 launch(Dispatchers.Main) { //同步代码块的方式实现异步操作val username = async { loadUser() } val motto = async { loadUserMotto() } nameTextView.text = username mottoTextView.text = motto } 上面的代码暂时不需要看懂,这里只是举个例子,让大家直观感受一下协程中这个...
创建协程的方法launch/async一共有3个参数,除了最后一个是协程的代码块以外,另外两个参数都是用来控制协程的,如协程上下文是用以控制协程运行环境的,包括在什么线程中去运行,句柄和树形关系以及何时切换线程,通过传递给launch/async的参数CoroutineContext。以及CoroutineStart就可以控制协程的运行。
launch:不阻塞创建线程,返回一个Job,且协程没有被挂起,任务执行中可以被异步取消 async:不阻塞创建线程,且协程没有被挂起,返回一个DeferredCoroutine,此时协程状态为Active, 协程的核心知识点: 1.协程调度器CoroutlineDispatcher:指定协程在哪个线程上运行
lifecycleScope.launch { val startTime = System.currentTimeMillis() Log.d(TAG, "2个异步任务开始:${startTime}") val mergerData = withContext() { //任务1,通过 async 必包实现 val data1 = async { getData1() } //任务2,通过 async 必包实现 ...