Kotlin协程中的launch、join、async、await的用法和区别

在 Kotlin 协程中,launchjoinasyncawait有着不同的用法和作用:

一、launch

用法

  • launch用于启动一个新的协程,它不返回结果。通常用于执行一些异步任务,不需要关心任务的返回值。
     import kotlinx.coroutines.*

     fun main() = runBlocking {
         launch {
             delay(1000)
             println("Coroutine launched")
         }
         println("Main function continues")
     }

特点

  • 快速启动一个协程,不会阻塞当前线程的执行。
  • 无法直接获取协程的执行结果。

二、join

用法

  • join是一个挂起函数,用于等待一个由launch启动的协程执行完成。通常在需要确保某个协程执行完毕后再继续执行后续代码时使用。
     import kotlinx.coroutines.*

     fun main() = runBlocking {
         val job = launch {
             delay(1000)
             println("Coroutine launched")
         }
         job.join()
         println("Coroutine completed")
     }

特点

  • 挂起当前协程,直到目标协程执行完成。
  • 只能用于等待由launch启动的协程,不能获取协程的返回值。

三、async

用法

  • async也用于启动一个新的协程,与launch不同的是,它可以返回一个Deferred对象,这个对象代表一个最终会有结果的异步任务。
     import kotlinx.coroutines.*

     fun main() = runBlocking {
         val deferred = async {
             delay(1000)
             "Async result"
         }
         println("Main function continues")
     }

特点

  • 启动一个可以返回结果的协程。
  • 返回的Deferred对象可以在需要的时候获取协程的执行结果。

四、await

用法

  • await是一个挂起函数,用于获取由async启动的协程的执行结果。通常在需要使用协程的返回值时使用。
     import kotlinx.coroutines.*

     fun main() = runBlocking {
         val deferred = async {
             delay(1000)
             "Async result"
         }
         val result = deferred.await()
         println(result)
     }

特点

  • 挂起当前协程,直到async启动的协程执行完成并返回结果。
  • 可以获取协程的执行结果,以便在后续代码中使用。

五、区别总结

  • launch用于启动一个不关心结果的协程,async用于启动一个有结果的协程。
  • join用于等待launch启动的协程执行完成,await用于获取async启动的协程的结果。
  • launchjoin组合适用于只需要执行异步任务而不关心结果的情况;asyncawait组合适用于需要获取异步任务结果的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值