C# 開發實戰:非同步程式開發技巧

學員課前注意事項

C# 開發實戰:非同步程式開發技巧 學員課前注意事項

課程簡介

在現代軟體開發中,非同步程式設計已成為不可或缺的核心技能。隨著多核心處理器與分散式系統的普及,非同步設計模式已成為提高效能與可擴展性的關鍵手段。若以本課程的主題為例,在 .NET 的世界裡,async/await 已經深入整個開發生態系統,無論是 ASP.NET Core 或其他框架,都將其視為一等公民。

在 2024 年,對 C# 開發者來說,掌握非同步程式設計不僅是加速應用程式的關鍵,更是避免潛在問題的重要能力。本課程將全面介紹 C# 非同步程式設計的核心觀念與實務技巧。我們將深入探索 TAP(基於 Task 的非同步模式),並透過實作與案例研究,讓學員掌握如何運用 Task 進行高效能的非同步操作,解決常見的開發挑戰。課程設計將引導學員逐步降低非同步設計的複雜度,確保學員能夠自信地在專案中運用這項技術。

本課程經過全面的翻新,加入了許多 C# 8.0 (.NET Core 1.0) 之後才新增的語言特性。如果你只會基本的 async/await 語法,卻不瞭解其內部深奧的特性與原理,那麼這堂課就是為你準備的。相信在熟悉這些非同步的核心概念之後,你將能夠更深入理解 C# 的非同步模型,並有效應用於實際專案中,並深入理解在不同專案中的最佳實踐,我們將全面涵蓋各種現代非同步開發技巧,讓你在面對高併發需求時,能夠應對自如,從容掌控。無論你是新手還是資深開發者,這門課程都將助你在非同步程式設計上達到新的高度。

課程特色

  • 由 Will 保哥 全程線上授課,無地域限制,可即時回應學員任何疑惑
  • 學員可透過多種管道提問:Discord 伺服器、Zoom 聊天室、Zoom 共享桌面
  • 學員可透過共享螢幕的方式提問與遠端控制,學員可觀摩解決問題的過程
  • 課程全程錄影,學員課後 3 個月內可免費無限次重播!
  • 課程結束寄發 Will 保哥親筆簽名結業證書 (無價)

報名連結

給學員的話

各位同學大家好:

我們這堂「非同步程式開發技巧」的課程,是為了幫助對 C# 有一定基礎的開發者,可以更深入地了解非同步程式設計的核心觀念與實務技巧。在深入瞭解核心概念之前,我們一定會談到一些基礎的計算機運作原理,雖然這些知識幾乎都是所有擁有大學學歷的畢業生都理應具備的能力,在理工相關科系中,甚至是在「大一」時的必修課程。但我相信 87% 的學員都已經忘了差不多了,所以我們課程一開始會幫大家惡補一下基礎知識。

以下這些專有名詞,課前的預習對於你理解課程內容將會非常有幫助,建議可以先問問 AI 幫助你瞭解這些專有名詞背後的含意,看完還不理解那更好,上課時可以提出,建議先把問題寫下來,方便上課時提問:

  • 中央處理器 (CPU) (Central Processing Unit)
    • 處理器 (Processors)
    • 實體插槽 (Sockets)
    • 實體核心 (Cores)
    • 邏輯核心 (Logical processors)
  • 超執行緒 (HT) (Hyper-Threading)
  • 電腦程式 (Program)
  • 執行 (Execution)
  • 處理程序 (Process)
  • 執行緒 (Thread)
  • 排程器 (Scheduling)
  • 先佔式任務處理 (Preemption)
  • 內容切換 (Context Switching)
  • 多工處理 (Multi-Tasking)
  • 多執行緒 (Multithreading)
  • 同步 (Synchronous)
  • 非同步 (Asynchronous)
  • 並行計算 (Concurrent computing)
  • 平行計算 (Parallel computing)
  • 同步化 (Synchronization)
  • 執行緒安全 (Thread-safety)
  • 同步內容 (SynchronizationContext)
  • 競爭狀態 (Race Condition)
  • 關鍵區段 (Critical Section)
  • 死結 (Deadlock)

課程中難免會講到一些你可能不太熟悉的觀念與知識,只要遇到你聽不太懂的地方,建議即時在課堂上提問,當下獲得疑惑的解答,印象會更加深刻。有些知識跟記憶力有關,例如步驟太多之類的,這類知識看影片就可以複習,我們的課程都會全程錄影,並提供學員課後三個月無限重播。但有些知識你當下聽不懂,再聽五遍你應該也不會更懂,那是因為背景知識不足造成的,你所需要的並不是重複聽五遍,而是應該設法擴充自己的知識領域,這樣才能更好地理解這些觀念。

此外,本次課程會提供大量的範例程式供學員研究與練習,即便你在上課過程中看不了這麼多 Code,我們在課後也可以多加利用本課程專屬的 Discord 頻道進行技術交流。

以下我還整理了一些本次課程所需的資訊,請務必詳細閱讀並提前準備,有任何疑問都歡迎隨時來信洽詢

註冊 Discord 帳號

由於我們的課程有越來越多海外的朋友加入,因此我們這次的課程特別設立了一個 Discord 伺服器,可以讓學員可以在裡面進行交流,請大家先註冊一個 Discord 帳號,並且加入我們的多奇教育訓練 Discord 伺服器

加入多奇教育訓練 Discord 伺服器

加入 Discord 伺服器之後,進入本次課程專屬頻道的步驟如下:

  1. 請至 rules 頻道仔細閱讀多奇教育訓練 Discord 伺服器使用規約

  2. 閱讀完畢後,請移駕到 #join 頻道,頻道中有加入課程專屬頻道的詳細說明。

    這個步驟主要是讓你輸入本課程的邀請碼,這組邀請碼我們會連同上課通知一併發出給學員,只要驗證正確即可看見本課程學員專屬的 Discord 頻道。

注意:若加入頻道的驗證次數錯誤超過三次,您的 Discord 帳號將自動被系統鎖定,如有失誤請來信解鎖: training@miniasp.com

C# 開發環境說明

為了能讓大家能夠順利的建立起 C# 開發環境,請設法在課前準備好一個可以開發 .NET 8 應用程式的開發環境。由於 .NET 8 是一套跨平台的開發框架,因此你可以在 Windows、macOS 或 Linux 上開發 .NET 8 應用程式。以下是需要安裝的相關軟體與安裝步驟與說明。

[ 作業系統 ]

我知道有些同學「希望」用 Mac 或 Linux 來開發 ASP.NET Core,這基本上沒有什麼問題,頂多就是有些 Windows 專屬的範例程式無法執行而已,例如 Windows Forms 或 WPF 之類的應用程式。

根據官方的 Install .NET on Windows 文件說明,目前 .NET 8 支援的 Windows 作業系統版本主要有:

  • Windows 10, Version 1607 or later
  • Windows 11
  • Windows Server, Version 1903 or later
  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows Server Core 2012 R2
  • Windows Server Core 2012
  • Nano Server, Version 1809+

根據官方的 Install .NET on macOS 文件說明,目前 .NET 8 支援的 macOS 作業系統版本主要有:

  • macOS 14.0 “Sonoma”
  • macOS 13.0 “Ventura”
  • macOS 12.0 “Monterey”

[ 瀏覽器 ]

使用 Google ChromeMicrosoft Edge 瀏覽器都可以,請更新到最新版本。

[ 開發工具 ]

  • .NET 8.0 SDK

    基本上 .NET 8.0 SDK 不用特別安裝,因為安裝 VS2022 就會自動安裝 .NET SDK 到最新版!除此之外,一些其他的 IDE 開發工具,像是 Rider 或 Visual Studio Code 這些知名的 .NET 常見開發工具,也會在需要 .NET SDK 時自動安裝,所以手動安裝 .NET 8.0 SDK 的步驟並不是十分必要。

    你若堅持使用 Notepad.exe 開發 .NET 的話,就可能需要額外安裝 .NET SDK。

  • Visual Studio 2022 (注意: Visual Studio 2019 不支援 .NET 8.0 開發)

    請安裝以下工作負載:

    • ASP.NET 與網頁程式開發 (ASP.NET and web development)
    • .NET 桌面開發 (.NET Desktop Development)
  • Visual Studio Code

    請安裝完 VS Code 最新版後,接著安裝 .NET Core Extension Pack 擴充套件。

    建議調整 VS Code 使用者設定:

    {
     "workbench.sideBar.location": "right",
     "debug.console.collapseIdenticalLines": false,
     "dotnet.automaticallyCreateSolutionInWorkspace": false
    }
    
  • LINQPad

    透過 LINQPad 來練習 .NET 的非同步程式設計模型非常方便,可以快速的撰寫與快速的驗證,對於熟悉 Task 相關的 API 或 async/await 語法也非常方便!

    若要用來驗證「前景執行緒」與「背景執行緒」的特性就不太適合

    ⚠ 建議不要使用 LINQPad 來實驗 C# 的 Thread 相關特性,因為 LINQPad 的運作架構並不會在程式結束後自動停止,所以你沒辦法很好的釐清「前景執行緒」與「背景執行緒」的特性,你很有可能會在學習過程中形成一些錯誤的認知。

[ 安裝 Git 工具 ]

上課練習過程中自己寫的 Code,建議自己做好版控,方便你自己日後查看你自己寫了多少東西,也方便你日後回顧。因此建議安裝 Git 版控工具,以下是一些常見的 Git 工具:

如果你是第一次使用 Git 版控,請開啟命令提示字元終端機視窗,並輸入以下指令進行設定,這是使用 Git 之前的必要步驟

  • 設定您的名稱: git config --global user.name YourName
  • 設定電子郵件: git config --global user.email YourEmail@example.com

上課前注意事項

由於我們上課時會採用 Zoom Workplace 桌面應用程式 軟體進行授課,因此請學員在上課前先安裝好 Zoom Workplace 桌面應用程式 軟體的最新版,並且測試好麥克風喇叭是否可以正常運作,以免上課時無法順利聽到課程內容。

以下幾點請在上課前確認完畢:

  1. 檢查 Zoom 是否為最新版本

    我這邊目前最新的 Zoom 版本為 6.2.2 (47417)

    Zoom 版本

  2. 檢查 Zoom 麥克風與喇叭是否正常運作

    你可以透過 Zoom 的測試功能來檢查麥克風與喇叭是否正常運作,如果你的麥克風與喇叭都正常運作,你會看到以下畫面:

    Zoom 麥克風與喇叭測試

上課時的注意事項

🔥 請不要在最後一刻才進入教室 🔥

🔥 請不要在最後一刻才進入教室 🔥

🔥 請不要在最後一刻才進入教室 🔥

  1. 你可以在課程開始前 30 分鐘進入 Zoom 會議室

    我會在讓大家進入會議室時播放背景音樂,請確認可以聽的到聲音。若聽不到聲音,可以先檢查 Zoom 麥克風與喇叭的設定是否正確,或是重新退出 Zoom 會議室後再次進入。

  2. 以下是進入會議室的步驟

    開啟 Zoom 軟體,點擊「加入會議」

    開啟 Zoom 軟體,點擊「加入會議」

    輸入我們課前通知的「會議號碼」與「顯示名稱

    輸入我們課前通知的「會議號碼」與「顯示名稱」

    輸入會議密碼

    輸入會議密碼

    測試喇叭和麥克風

    測試喇叭和麥克風

    請務必測試一下麥克風與喇叭是否正常運作,以免上課時無法順利聽到課程內容。

    請務必測試一下麥克風與喇叭是否正常運作,以免上課時無法順利聽到課程內容。

    進入會議室之後,如果聽的到聲音,就按下「回應」的 ✅ 按鈕。

  3. 多利用「回應」功能給予課程回饋

    過往有許多同學都找不到 Zoom 的「回應」功能,我特別截圖跟大家說明怎樣操作。

    Zoom Reactions

    基本上在 Zoom 最下方的工具列上,會有個「回應」的按鈕,按下去之後會有三排的表情符號可以按:

    第一排:這些表情符號按下之後可以表達你在課堂上的心情,而且 10 秒之後就會自動消失。這些表情非常重要,因為這可以讓講師知道你當下的心情,感覺開心的時候可以選 😂 (大笑),聽到很厲害的內容時可以按下 👍 (讚)、❤ (愛心)、👏 (拍手)、🎉 (獻花) 等表情,這可以讓課程變的相當活絡有趣!

    第二排:這些符號按下去之後就不會自動消失,主要用來回應講師的提問,方便大家回答問題。例如講師問「大家都聽的到我的聲音嗎?」,你可以按下 ✅ (打勾) 來回答「聽的到」,或是按下 ❌ (叉叉) 來回答「聽不到」,這樣講師就可以知道你的聲音是否正常。

    第三排:只有一顆「舉手」的按鈕,按下去代表你想要開麥克風發言,講師會看到你的舉手,然後依序讓你發言。先按「舉手」的人會排在最上面,講師會更容易看到你的舉手狀態。

  4. 利用【聊天室】來向講師或學員傳達訊息

    Zoom 軟體有個「聊天」功能,但請不要在「所有人」的視窗聊天,因為很多人一起聊天的結果,就是大家都找不到訊息。

    這個「聊天室」功能主要用來讓學員與講師之間的溝通,如果你有任何問題,可以在「聊天室」中發問,講師、助教或其他學員都會盡量回答你的問題。

    留言時,請務必在一個訊息中把問題打完,不要像 LINE 一樣,想到一句打一句,否則可能會不同人發問的問題之間交錯出現,導致閱讀困難。

  5. 利用【麥克風】使用語音提問

    進入會議室之後,麥克風會處於「鎖定」的狀態,如有問題想透過語音發問,請先點擊 Zoom 軟體的「舉手」按鈕,講師會開啟你的麥克風讓你線上發問。

    如果講師需要學員進行語音互動時,願意發言的人,也可以先按下「舉手」等候講師呼喚,並準備開啟麥克風,這樣才不會花太多時間等待學員回應。

  6. 不開放【視訊】使用

    原則上我們上課不需要開啟視訊鏡頭,以確保大家的個人隱私。

上課連結

由於我們上課時會採用 Zoom Workplace 桌面應用程式 軟體進行授課,而上課的 Zoom 會議室連結實際上是會透過另外的郵件通知學員,郵件主旨會是:

【上課通知】C# 開發實戰:非同步程式開發技巧 0928

如果你在上課當天都還沒收到通知郵件,請立即寫信與我們聯繫!🔥