在上一次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(),算是當時學習時的一個筆誤吧,這里說明一下,就不改了。
