Kotlin 協程筆記 再蹩一眼 (二) 掛起

1 suspend函數 掛起的不是線程,也不是函數  !而是掛起的協程塊,將協程塊切到另一個線程
2 協程塊就是 
launch(Dispatchers.Main){ 
        \\ todo  在這裏!!
} 裏的代碼複製代碼

掛起的定位: 暫時切走脫離當前線程,執行完函數後再切回來

1 ************協程的掛起本質就是切線程 *************
2 基於線程而實現的一套更上層的工具API
3 只不過掛起函數執行完畢後,協程會稍後自動從新切回它原先的所在線程複製代碼

從哪裏掛起


先別看圖,看懂下面的描述,再對應圖裏的代碼bash

1 聲明的suspend從當前線程(main)開始掛起,脫離當前執行它的的線程,協程塊suspend裏的代碼就沒有在當前線程跑了異步

2 當前線程( main )遇到suspend函數時  就等於跳過當前代碼(suspend裏的邏輯代碼,suspend被掛起),而掛起的邏輯代碼在它聲明的指定線程裏(IO)等待執行..。 async

3 執行完IO後,函數又會幫咱們自動切回到main線程,能夠設置特殊的Dispathcers(調度器) ,不切回去。ide

4 Dispathcers 指定協程執行的線程 ,還能在suspned掛起函數執行完以後,自動再切回去函數

注意的地方是 ,掛起後 不是這個協程塊停下來了!像異步分發工具

suspend 它的做用 

  • 起提醒做用    提醒你在協程塊裏調用掛起函數!   協程塊是啥? 見頂部

並非聲明它了 ,函數就立馬掛起了,真正起決定的是裏面聲明相似 withContext(Dispathcers.IO)、async() 等函數裏的底部代碼post

async() 也是建立協程的函數ui


第一節筆記 juejin.im/post/5d8393…spa

視頻課www.bilibili.com/video/av682… @扔物線 期待下一節協程講課
線程

相關文章
相關標籤/搜索