委派 Delegate
講的簡單一點 他就像一個轉接頭
你充 iphone 需要轉接頭 但轉接頭的兩端能插什麼線是固定的
你買了 Type-C 的線 就不可能插進 Micro USB 的孔
但也就是說 只要是插的進去的線 就都可以讓你充電
今天你有錢可以用原廠的線 明天比較窮就用夜市牌的
反正只要插的進轉接器 就是可以用的線
委派 Delegate
講的簡單一點 他就像一個轉接頭
你充 iphone 需要轉接頭 但轉接頭的兩端能插什麼線是固定的
你買了 Type-C 的線 就不可能插進 Micro USB 的孔
但也就是說 只要是插的進去的線 就都可以讓你充電
今天你有錢可以用原廠的線 明天比較窮就用夜市牌的
反正只要插的進轉接器 就是可以用的線
其實所有跟 Task 有關的操作裡面,重要的事情一直只有一項
哪些會繼續往下跑、還有哪些會阻塞 (要等的意思)
今天再來看看 GetAwaiter() 的阻塞與不阻塞
async 非同步
await 等待
前面我們看過了 Task 幾種使用方法
那如果今天我們想要的是
1. 三個好友同時搶廉航機票,只要任一人搶成功,就可以成行
=> Task.WaitAny
2. 三個好友同時從起點出發,全部都抵達終點才算獲勝
=> Task.WaitAll
3. 三個好友接力賽跑,A 跑完才能換 B,B 跑完才能換 C
=> ContinueWith
在比較久以前的.NET Framework版本 大家可能直接操作過Thread
一言以蔽之 在絕大部份情況下
建議大家使用 Task 取代 Thread
再一個問題
前面我們討論過 Parallel,當然我們也可以同時 new 很多 Task,讓結果就像是 Parallel
那我該選擇哪個?
一言以蔽之 在絕大部份情況下
建議大家用 Parallel 取代 多個 Task
Lock是一個一次只能有一個人進去的區域
但如果我有自己的上限值 ex: 一次可以 3 個人一起進入某個區域
那我該怎麼做呢?
答案就是使用 SemaphoreSlim
Parallel.For很明顯跟上一篇Parallel.Foreach是差不多的東西
所以我們再加上 Lock 來讓情況變有趣些
假設媽媽跟你說 今天晚上九點時 你有三件事要做
1. 掃地 2. 洗澡 3. 洗碗
因為這三件事並不存在先後關係 所以哪件先做都可以
而聰明如你一定會想 如果我可以同時掃地、洗澡、洗碗一起做
那不是就太好了嗎
在C#中的複製有兩種
深度複製 (Deep Copy) 與淺層複製 (Shadow Copy)
這兩者到底是什麼意思 請大家Google一下便知道了
通常淺層複製是不需要關心的 難就難在深度複製
其實Reflection不難 但就是效能比不上hard code好
如果應用的情境不需在意效能 拿來處理一些瑣碎的小功能是蠻好用的
今天我們以假設要輸入一個字串List => 取回 不重覆、並排除空字串、Null、前後空白為例
來寫一個小function