• Kotlin - 协程构建器 CoroutineBuilder


    是CoroutineScope的扩展函数,并继承了它的coutineContext来自动传播其上下文元素和可取消性。挂起函数需要相互传递 Continuation,每个挂起函数都要由另一个挂起函数调用,这一切都是从协程构建器开始的。

    • lunch():无需产生值。返回一个 Job实例 用来管理协程的生命周期。异常???
    • async():需要产生值。返回一个 Deferred实例 通过 await() 拿到执行的结果(包括异常)。异常???

    参数 context:指定协程上下文。默认为空的上下文。

    参数 start:指定协程启动模式。默认为可以立刻被调度的状态。

    参数 block:协程执行体,即要做的任务。

    lunch()

    public fun CoroutineScope.launch(
        context: CoroutineContext = EmptyCoroutineContext,
        start: CoroutineStart = CoroutineStart.DEFAULT,
        block: suspend CoroutineScope.() -> Unit
    ): Job

    返回对该协程任务的引用,即 Job 接口的匿名实现。

    async()

    public fun CoroutineScope.async(
        context: CoroutineContext = EmptyCoroutineContext,
        start: CoroutineStart = CoroutineStart.DEFAULT,
        block: suspend CoroutineScope.() -> T
    ): Deferred 

    返回协程的执行结果,通过 await() 可以拿到协程的执行结果。

    区别

    协程构建器

    launch、async...

    协程作用域函数

    coroutineScope()、supervisorScope()、withContext()...

    CoroutineScope的扩展函数挂起函数
    携带来自CoroutineScope的协程上下文携带contineation的协程上下文
    异常通过Job传递给父协程异常像普通函数那样抛出
    构建器彼此之间是并发的挂起函数彼此之间是阻塞的
  • 相关阅读:
    OD试题(八)
    结合DevOps实践:使用Huawei CodeArts和CCE进行自动化Kubernetes集群部署
    1个月写900多条用例,2线城市年薪33W+的测试经理能有多卷?
    Vue的生命周期详解
    redis三(3-1)
    翻译俄语的软件
    linux的ping及telnet
    【装箱问题】基于Shuffled Complex Evolution (SCE) 算法解决装箱问题 (BPP)附matlab代码
    Mybatis知识【Mapper代理开发&核心配置】第三章
    Cmake的安装与使用
  • 原文地址:https://blog.csdn.net/HugMua/article/details/126176554