本來只是想簡單帶過 .Net , 但不知不覺就寫了一大堆, 覺得內容有些混亂, 就在今天花些時間把這些篇的內容作個總整理吧。
SynchronizationContextTaskScheduler
和 threadpoolSynchronizationContextTaskScheduler
, 把任務推入 Threadpool 執行, 但是使用一個外來方法要求 Threadpool 用同步方式執行此任務。 這就是一種 .Net 中 await 的實踐方法其中第 1 ,2 ,3 ,12 步新的, 讀過前面的流程的讀者, 只要看這三步就好。
taskList = 待完成任務列表, 我自己命名的變數
Task.Run
打包多個任務WhenAll
方法, 且傳入第2步創建的多個 task , 為了方面之後用 taskList 描述。WhenAllPromise
物件, 且傳入 taskListWhenAllPromise
物件中WhenAllPromise
內部執行依序掃描 taskList 內的 taskWhenAllPromise
有可能被掛載到別的 task 執行, 就會被視為 multi-thread )WhenAllPromise
的 reference 掛載到 未完成的 task 的連續任務區(這個名詞是我自己取的 XD )WhenAllPromise
內的未完成任務數量為0, 表示任務全部完成, 當即設置回傳變數, 與進行回傳。WhenAllPromise
有在上面的第 5 步掛載到別的 task。WhenAllPromise
不會結束。Task.WhenAll( taskList )
留在原地閒置。WhenAllPromise
掛載到的任務被 Threadpool 完成, 其會接著運行被掛載的 WhenAllPromise
中的Invoke
方法。Invoke
方法會 atomic 的把未完成任務數量減 1 , 且若減完 1 未完成任務數量為 0 時, WhenAllPromise
當即設置回傳變數, 與進行回傳。Task.WhenAll( taskList )
順利回傳 taskList 執行結果, 主程式繼續往下運行。試著寫文章後, 發現一些平常一下就過去的東西撰寫出來卻要很久, 更不要說要寫得好了。
帶來的結果就是必須刪減內容以及進度趕不上預期 QQ
明天開始就進入後半部分了, 我們會試著讀 node.js, 之所以要讀 node 有幾個原因, 最主要就是我是 node 後端, 對這個比較有興趣。 其二是, 他的 schedule 部分也在 github 上很好找, 不會像 .Net 一樣找不到, 不會有種意尤未盡的感覺。
為了幫助大家理解之後要讀的 node.js , 會先開始聊一下 IOCP 和 epoll 等概念。