通过async实现协程的延迟执行及结果获取

在上一次https://www.cnblogs.com/webor2006/p/12022065.html对于协程的async和wait进行了初步的学习,其可以加速执行的性能,其实对于async它是提供有延迟执行的功能,回忆一下上一次咱们的代码:

我们只传了一个参数,其实async是接收三个参数的,另外两个参数有默认值:

其中CoroutineStart是一个枚举值:

我们如果不显示指定的话则是DEFAULT,先看一下它代表的意义:

也就是上一次咱们做的这个async中的代码块是立即会执行的,不是延时执行的,但是!!在实际场景中可以会有遇到async时不希望立刻就来执行,而是这个执行的时机由程序员在某个条件下来触发,此时这个CoroutineStart参数就需要改变一下不能用默认参数了,需要用它了:

那既然这种延迟的async的执行可以由程序员自己来决定,那如何来开启执行呢?下面先看一下这块的理论:

我们可以通过将async方法的start参数设置为CoroutineStart.LAZY来实现协程的延迟执行。在这种情况下,协程会在两种场景下去执行:调用Deferred的await方法,或是调用Job的start方法。

好,下面来看代码:

接下来就是要来启动延迟的async进行执行了,所以如下:

那运行结果会变成啥样呢? 下面来运行一下:

下面来分析一下:

其中对于总耗时不要这样认为哈:

好,接下来看一个坑。。

我觉得没啥区别吧,之前理论不是有这样的说明么?

下面运行看一下:

其实根源是:

所以,如果将async变成了lazy了之后需要特别的注意!!!如果使用不当的时候跟不用async没任何区别了,这样就失去了async的使用意义了。

【温馨提示】:在上面的程序中调用的都是intValue1(),没有调用initValue2(),算是当时学习时的一个笔误吧,这里说明一下,就不改了。

posted on 2019-12-17 14:33  cexo  阅读(2273)  评论(0编辑  收藏  举报

导航