Asynchronous - 第二章:任務 (Task)
breakfastcallback in 早餐callback 之難一. 線性程式碼回歸callback 之難二. 自己管完成狀態callback 之難三. try/catch 沒用任務 ( Task )try/catch 有用了自動錯誤拆包,不再面對可怕的 AggregateException自動包裝 return,不必自己 new Task.Resultsummary清晨,陽光還沒透進窗簾,我們站在廚房前,準備煮一頓早餐。那是個沒有 await、沒有 Task 的年代,一切流程只能靠一層層的 callback 撐起來。煮早餐這件事,得先等水滾、再控火候、再計時間,哪一步出錯,就得重來。每一個選擇都得接在前一個選擇的屁股後面,像在搭積木,一層接一層,沒有省略鍵
所謂的 Callback,其實本質就是:「這件事我現在做不完沒關係,我先把『之後要幹嘛』這個決定權丟出去,等你搞定了,再來叫我回來接著做。」事情還沒弄好,整個流程不卡死在原地
現實生活中有太多事都不是即刻完成的──水要時間才會滾、I/O 要等、網路請求要等、使用者要按個鈕、檔案要讀完……如果我們什麼都等完再做就 ...
架站 (一. Cloudfare體驗)
想來玩玩看 Cloudfare 的 CDN,
將網站託管到 cloudflare具體來說,這個託管就是將網站的 DNS 記錄 (A, CNAME…) 和流量管理轉移到 Cloudflare 平台上,Cloudflare 會去解析您的域名,將流量導向正確的 IP 地址,如此一來,訪客的流量會經過 Cloudflare,這樣可以利用 Cloudflare 的 CDN、緩存、壓縮等功能來加速和優化網站。
1.首先要先去買網域,看是 GoDaddy還是啥的
Appwork 時期買的,趁續約金額變成 40 倍前再拿來做做實驗 (網站還順便被數落一番)
2.重新設定 Name Server 為 Cloudfare
確認 cloudflare DNS 設定1.確認 Proxy Status => Proxied
如此一來,當有人透過 cofstyle.shop 瀏覽網站時,Cloudflare DNS 在解析這個 Domain 會回傳其 CDN Proxy 主機的 Anycast IP 而非我的主機真實 IP,Cloudflare 在全球各地放了很多台相同 IP 的主機,從美國、 ...
OutputCache
🍂 與其他快取的差異最大的差異,是他快取的維度是整個 API 回傳的結果,但與 Redis 等獨立快取系統相比,OutputCache 的使用門檻較低,無需額外安裝與維護快取伺服器,只要設定好屬性即可立即套用,對中小型應用特別友善。
🍂 專案觀察
Cache.Config集中管理設定值
🍂 設定OutputCache 屬性,我們可以指定多項快取參數,其中的 Location 是非常關鍵的設定,它決定了快取資料的儲存位置,包含:
Client 快取存在用戶端(例如瀏覽器)。
Server 快取存在伺服器的記憶體中。
Any 交由系統決定最合適的位置。
在使用 OutputCache 機制時,快取資料的仍受到一定限制,以避免對系統資源造成過大負擔。以下為主要的限制項目:
SizeLimit 指快取區域的總容量上限。當快取資料總量達到此上限時,若未進行資料逐出(Eviction),系統將不再快取任何新的回應。預設上限為 100 MB。
MaximumBodySize 指單一回應(Response Body)可被快取的最大容量。若回應內容超過此大小,系統將不進 ...
Enum - 關於溝通
CommunicationJSON 序列化與反序列化1️⃣ 反序列化時的大小寫處理2️⃣ 字串與數字混用的解析3️⃣ 無效值的處理(Invalid Enum Value)4️⃣ 反序列化不指定資料呢5️⃣ NewtonSoft 支援 SnakeCasewrap阿罵 : 要吃水果嗎我 : 不用
…
阿罵 : 要吃蘋果嗎我 : 不用,謝謝阿罵…
阿罵 : 要吃芭樂嗎我 : 不要
…
阿罵 : 要吃蘋果還是芭樂我 : (。ŏ_ŏ)
…………
我們是否也曾在溝通上感到無力 ? 是否想過為甚麼阿罵總是覺得你要吃水果 ?其實你知道阿罵只是想跟你聊聊天、想跟你有更多的互動你的拒絕也不是討厭水果甚至討厭阿罵,你只是當下沒有足夠的耐心與阿罵交流,或是某種程度上是因為溝通成本太高
溝通,是一門藝術,更是一種選擇。人生中最痛苦的事之一,莫過於你以為你說得很清楚,對方卻完全接收不到對應的資訊。這樣的錯頻,在程式世界裡也屢見不鮮。你明明送出了一個清楚的 StatusEnum.Full,卻被序列化成一個看似陌生又難以理解的 2。又或是,在情感世界裡,你說「我很好」,但其實你需要的是「你懂我」。真正的溝通,從來 ...
Enum - 限制,是自由的基礎
Constraint處理訂單的狀態DescriptionEnum 當作查詢主鍵,對應到處理器結語凡可列舉者,皆應被命名,用數字或字串記錄分類,像在沙地上寫字。風吹就散,誰都能改,誰都會迷路。唯有列舉(Enum),能為混亂命名,能讓程式碼之神歸位,如編鐘之列、星辰之座。有些人會說,Enum 限制了自由,但真相是:「沒有邊界的自由,終究會走向混亂。」
說到這裡,應該不難理解,Enum 的本質,可以減少混亂值、提升可讀性、強化型別安全,杜絕魔法數字與野生字串,我們會說,有結構的程式碼,是對未來同事最好的善意。當你看到一個架構龐大的 C# 專案,結果一個收藏 Enum 的資料夾都沒有時,個人認為,隔天就可以提交離職信了(當天先去收個驚)
Enum 用來代表「一組固定、有限、離散的值」,
讓我們的程式碼更有語意、更安全、更容易維護。
處理訂單的狀態時(待處理、處理中、完成、 ...
Flag Enum - 人生應該有更多種可能性
LivesSingle AnswerFlag EnumBiswise那些喜歡玩遊戲的人進階的需求 : 一串文字轉化成 FlagEnum結語上回聊了 Enum 對這世界建立秩序的重要性,但還有一個問題是,一個東西可能會同時擁有「多個狀態」,我們希望可以用「一個變數」表示出這些狀態的「組合」。正如同人不只是單一角色,而是多重身分的集合,在人生裡,我們每個人都不只是一種角色:
可能是學生、同時是 朋友的情感諮商專家、同時是家庭的支撐者、同時是某個創作者、夢想家,普通的 Enum 是「單選題」
例如有個權限控管的 Enum
1234567enum FilePermission{ Read, Write, Execute}
導致只能寫
1var permission = FilePermission.Read;
通常我們會希望同時可以 Read 和 Write,怎麼辦?這時候可能會想用 List、Array、HashSet 等來處理,但這樣會比較麻煩,判斷時也比較繞口,十分痛苦
12var permissionList = new List<F ...
Groupby - 在資料中探索歸屬
當旋律悄然劃過時空的軌跡,每一首歌就像一顆星辰,閃耀著創作者獨有的靈魂。你是否曾想過,這些音符與樂章之間,是否也隱藏著某種秩序?某種——相似而未被察覺的連結?
在現實中,我們以風格定義音樂,以性別分類聲線,以名字尋找熟悉。在程式語言的世界中,我們用 GroupBy 尋找規律,試圖透過「分組」理解資料之間微妙的關係。這不只是邏輯的操作,更像是一場哲學的提問:
什麼定義了我們的「相同」?
在群體之中,我們究竟選擇呈現什麼?又忽略了什麼?
今天,讓我們從一份歌手與歌曲的資料出發,探索 LINQ 中 GroupBy 的靈魂。
🐛 MS 文件中的命名解析官方文件連結
交響樂需要指揮的手勢,GroupBy 也仰賴幾個核心角色來指引分組的方式與結果
keySelector
它定義了分組的依據 —— 像是將歌曲按照曲風(搖滾、爵士、古典)、調性(大調、小調)、或是演出者進行分類。每一個 key 就像樂 ...







