Day 26:幫協程寫測試,runTest 與虛擬時間排程器 結尾留下一個問題,前面累積的所有觀念,放進一個真實一點的專案裡會長成什麼樣子。今天正面回答這個問題...
Day 25:小結:Flow 資料流工具箱總覽,準備進測試與收斂期 結尾拋出一個問題:如果想確定一段協程程式碼在各種時間差、取消時機下的行為都符合預期,而且不想...
Day 24:背壓是什麼,生產太快時該怎麼踩煞車 結尾提到,本階段用來處理協程資料流的核心工具已經全部到齊,這幾樣工具彼此之間的關係,值得回頭整理一次。 今天要...
Day 23:Flow 底層其實是 Channel,兩者的關係是什麼 停在一個問題上:今天談到的暫停等待,處理的都是速度差距還在合理範圍內的情境,如果生產資料的...
Day 22:Channel,協程之間怎麼傳話 停在一個問題上:Channel 讓一個協程把資料一筆一筆接力遞交給另一個協程,而收集 Flow 的時候,資料同樣...
Day 21:StateFlow 與 SharedFlow,冷流不夠用的時候 停在一個新的情境上:如果一個協程產生了一批資料,需要一筆一筆像接力一樣,直接遞交給...
Day 20:Flow 的操作符,map、filter、collect 這些常用招式 結尾點出一件事,前面兩天示範的所有 Flow,處理的都還是「每次收集就從頭...
Day 19:從回傳一個值到回傳一串值,Flow 是什麼 停在一個問題上,拿到一串進度數值,如果需要過濾掉不需要的中間值,或者轉換成另一種格式才呈現給使用者,難...
Day 18:小結:協程的執行環境與例外治理工具箱總覽 結尾把系列至今出現過的所有任務攤開來看,下載一張圖片,或者聚合多個來源的結果,本質上都是執行一次、拿到一...
Day 17:try-catch 在協程裡為什麼有時候沒用 結尾提到,從 Dispatchers 談到那一天,這個階段已經一路建立起協程執行環境與例外治理的主要...
Day 16:CoroutineExceptionHandler,例外最後會被誰接住 結尾留下一個疑問:既然 CoroutineExceptionHandler...
Day 15:併發限制,用 Semaphore 保護下游別被打爆 結尾留下一個問題:Semaphore 確實能保護下游資源不被瞬間打爆,但如果同時湧入的請求量遠...
Day 15:一個協程失敗,其他協程要不要一起死,SupervisorJob 登場 結尾留下一個疑問:知道了 SupervisorJob 能讓一個子協程的失敗不...
Day 09:Job,協程生命週期的控制把手 結尾留下一個問題:對一個 Job 發出取消要求之後,協程是不是立刻停下。這個問題後來由 Day 10:協程取消不是...
Day 13:Coroutine Context,協程隨身攜帶的那包設定 結尾留下一個問題:協程如果已經在執行了,執行到一半才發現接下來這段程式碼需要換一個 D...
Day 12:R2DBC,讓資料庫存取也不阻塞執行緒 結尾留下一個問題:資料庫存取這一段的非阻塞問題解決了,但真實的訂單查詢與扣庫存流程往往不只跟資料庫打交道,...
Day 12:Dispatchers,協程實際跑在哪條執行緒上 結尾留下一個問題:啟動協程時指定的 Dispatcher,具體是用什麼方式跟著協程一起被攜帶著走...
Day 11:小結:Scope、Structured Concurrency、Job、取消如何協同運作 結尾留下一個還沒碰過的問題:這幾天建立的框架,回答的都是...
Day 10:協程取消不是強制中斷,是一場合作 結尾提到一件事:Job 樹負責把取消訊號傳遞到每個角落,Structured Concurrency 界定子協程...
Day 09:Job,協程生命週期的控制把手 結尾留下一個問題:透過 Job 對協程發出取消要求之後,這個協程接下來會怎麼樣,是像拔掉電源一樣說停就停,還是中間...
Day 08:coroutineScope 與 supervisorScope,兩種收斂行為的差異 結尾留下一個問題:coroutineScope 與 supe...
《Day 07:Structured Concurrency,為什麼協程不能亂長亂放》 建立了一個標準規則:子協程失敗,預設會向上影響整個父範圍,導致父協程與其...
Day 06:Coroutine Scope,協程住在哪裡、活多久 結尾留下一個問題:同一個 Scope 裡同時養著好幾個協程,其中一個出事,會不會連累其他協程...
《Day 05:把暫停機制與啟動方式放在一起跑一次》結尾留下一個問題沒有回答:協程數量一多,誰該負責統一管理它們,確保這些協程不會各自失控地一直跑下去。今天要正...
《Day 04:launch、async、runBlocking,三種 Coroutine Builder 該選誰》 結尾留下一個約定:把這幾天分別認識的東西,...
《Day 03:Continuation 是什麼,編譯器在背後偷偷做了什麼事》留下一個問題。suspend function 內部已經具備暫停與恢復的能力,這套...
《Day 02:第一個 suspend function,暫停到底暫停了什麼》 留下一個還沒解開的疑問。suspend function 暫停的時候,一定需要某...
《Day 01:為什麼你需要協程,從一個會卡住主執行緒的下載函式說起》 停在一個問題上:如果一段程式碼能看起來依序寫下去,遇到等待卻不會卡住主執行緒,那麼它在等...
你按下取消鍵,畫面上的轉圈圈圖示卻還在轉。你確定自己呼叫了取消,Log 也印出了取消的訊息,但那個背景工作就是不肯停下來,畫面卡在那裡,好像根本沒聽到你說了什麼...
你大概寫過這樣的程式碼。一個 viewModelScope.launch 包住一段網路請求,一個 async 搭配 awaitAll 平行抓了好幾筆資料,跑起來...