kotlin协程async与await

这篇具有很好参考价值的文章主要介绍了kotlin协程async与await。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

kotlin协程async与await

import kotlinx.coroutines.*
import kotlin.system.measureTimeMillis

fun main() {
    val time = measureTimeMillis {
        runBlocking {
            /**
             * async 是 CoroutineScope 扩展函数,async 和 launch 的区别在于async 可以返回协程结果,而 launch 不能。
             * async默认值 CoroutineStart.DEFAULT 协程在声明同时就被启动(实际上还需被调度执行,但可认为是立即就执行)
             * CoroutineStart.LAZY 不主动启动协程,直到主动调用async.await()或async.satrt()后才启动(懒加载模式)
             * a.await() + b.await()导致两个协程顺序执行
             */

            val a = async(start = CoroutineStart.LAZY) {
                delay(2000)
                1
            }

            val b = async(start = CoroutineStart.LAZY) {
                delay(3000)
                2
            }

            /* 打破CoroutineStart.LAZY懒加载,协程立即投入执行。
            a.start()
            b.start()
             */
            println(a.await() + b.await())
        }
    }

    println(time)
}

输出:

3
3072

https://zhangphil.blog.csdn.net/article/details/129265638https://zhangphil.blog.csdn.net/article/details/129265638

kotlin协程、线程切换,函数方法委托_zhangphil的博客-CSDN博客runBlocking 内部启动的3个协程做耗时操作,从输出可以看到3个协程交叉并发执行,runBlocking 会等到3个协程执行结束后才退出,输出结果有明确先后顺序。一般编程的技法,比如,在Android中,假设在主线程中实现了一个函数,但该函数是耗时操作,毫无疑问,需要将这个函数的实现切入非主线程中操作,那么可以设计一种托管的函数,在托管的函数里面干脏活,处理完成后,把结果抛到主线程。结果1-a: 5 - tid:22。结果1-b: 5 - tid:24。结果2-a: 9 - tid:22。https://blog.csdn.net/zhangphil/article/details/130161705

https://zhangphil.blog.csdn.net/article/details/129250518https://zhangphil.blog.csdn.net/article/details/129250518文章来源地址https://www.toymoban.com/news/detail-454010.html

到了这里,关于kotlin协程async与await的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Promise、Async/Await 详解

            Promise是抽象异步处理对象以及对其进行各种操作的组件。Promise本身是同步的立即执行函数解决异步回调的问题, 当调用 resolve 或 reject 回调函数进行处理的时候, 是异步操作, 会先执行.then/catch等,当主栈完成后,才会去调用执行resolve/reject中存放的方法。      

    2024年02月14日
    浏览(39)
  • Async In C#5.0(async/await)学习笔记

    此文为Async in C#5.0学习笔记 方式一:基于事件的异步Event-based Asynchronous Pattern (EAP). 方式二:基于IAsyncResult接口的异步 方式三:回调 方式四:使用Task,尤其是TaskT 共同的缺陷:必须将方法分为两部分 乱如麻的递归 async/await 注意,下面这样操作可能会有隐患,当firstTask有异常时

    2024年01月22日
    浏览(44)
  • async/await 的理解和用法

    async放在函数前的一个修饰符,函数会默认返回一个Promise对象的resolve的值 1、await也是一个修饰符, 只能放在async定义的函数内 ,可以理解为 等待 2、await 修饰的是Promise对象: 获取Promise中返回的内容 (resolve或reject的参数), 且取到值后语句才会往下执行; 3、如果不是P

    2024年02月01日
    浏览(41)
  • 【C#】async和await 续

    在文章《async和await》中,我们观察到了一下客观的规律,但是没有讲到本质,而且还遗留了一个问题: 这篇文章中,我们继续看看这个问题如何解决! 我们再看看之前写的代码: 当时问题是,为啥 Task.Factory.StartNew 可以看到异步效果,而Task.Run中却是同步效果。 那其实是因为

    2024年02月15日
    浏览(42)
  • async_await 源码分析

    这篇文章主要是分析 async/await 这个语法糖,分析一下 async 和 await 是如何做到异步的。首先,我先抛出两个问题,各位可以先想一下。 await 之后的方法是何时执行,如何执行的? 为什么 await 之后的代码会在不同的线程执行? 要想知道 async/await 是怎么运行的,需要先写一个

    2024年02月12日
    浏览(41)
  • async和await的的基本使用

    说明: await’ expressions are only allowed within async functions and at the top levels of modules.ts(1308)

    2024年02月13日
    浏览(45)
  • promise及异步编程async await

    ECMAScript 6 新增了正式的 Promise(期约)引用类型,支持优雅地定义和组织异步逻辑。接下来几个版本增加了使用 async 和 await 定义异步函数的机制 JavaScript 是单线程事件循环模型。异步行为是为了优化因计算量大而时间长的操作,只要你不想为等待某个异步操作而阻塞

    2024年02月04日
    浏览(43)
  • async/await实现Promise.all()

    🐱个人主页: 不叫猫先生 🙋‍♂️作者简介:专注于前端领域各种技术,热衷分享,期待你的关注。 💫系列专栏:vue3从入门到精通 📝个人签名:不破不立 Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set 都属于 ES6 的 iterable 类型)的输入,并且 只返回

    2024年01月18日
    浏览(45)
  • async/await 与console(C#)

    上一篇async/await 致WPF卡死问题(https://www.cnblogs.com/stephen2023/p/17725159.html),介绍主线程阻塞,async/await导致卡死问题,同样的代码在console下却并不会出现卡死。 并且await后的任务也是由“新线程”执行的,并非主线程执行。 对于如下含await的代码 可以类比于: WPF与Console不同

    2024年02月08日
    浏览(58)
  • 彻底理解Promise和async/await

    1.异步行为是 为了优化因计算量大而时间长的操作 . 2.pedding 待定: 表示尚未开始或正在进行中    fulfilled 解决: 表示已经成功完成    rejected 拒绝: 表示没有完成 3.从pedding状态切换到fulfilled状态或rejected状态后,状态就不会再改变.而且也不能保证promise比如会脱离待定状态. 因此

    2024年02月03日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包