方法:.Net6 新定时器PeriodicTimer 在.NET 6中引入了新Timer:System.Threading.PeriodicTimer,它和之前的Timer相比,最大的區別就是新的PeriodicTimer事件處理可以方便地使用異步,消除使用callback機制減少使用複雜度。 using PeriodicTimer timer = new(TimeSpan.FromSe...
[C# 筆記] 練習串接 API - 以 URL 取得 JSON 資料並反序列化(Deserialize) 為物件
以 URL 取得 JSON 資料後,將 JSON 資料反序列化(Deserialize)為自定義的物件(Object)。 以 URL 取得 JSON 資料 以 URL 取得 JSON 資料 使用 HttpClient.GetStringAsync() 取得指定 URI 所回傳的資料 MSDN - HttpClient 類別 (System.Net.Http) MSDN - H...
[C# 筆記] 透過 Telegram Bot 發送訊息
建立 Telegram Bot,並以 C# 透過 Private Channel 來發送訊息 Preparation 一個 Telegram 帳戶 New a Bot 私訊 @BotFather 並輸入 /newbot,接著依序輸入 Bot 的名稱、ID,需要注意的是 ID 必須以 bot 結尾,如:example_bot 若建立成功,@BotFather 會給予我...
[C# 筆記] 將主程式進入點 Main()方法改成 async 非同步
預設的 Console 應用程式 通常剛建立好一個 Console 應用程式專案,其主程式 Program.cs 的內容如下: namespace ConsoleApp { class Program { static void Main(string[] args) { // Your code here ...
關閉VS2022起始頁「最近開啟的專案」
工具 > 選項 > 環境 > 一般 > 啟動時,開啟最近的解決方案(最下方的下拉選項) 手動選擇一個選項,這裡是選「空白環境」 啟動時,開啟(P):空白環境 Visual Studio vs 不用每次打开都打开项目
[Mac] 在 Mac 上格式化外接硬碟/隨身碟,讓 Mac/Windows 皆可用
步驟 在 Launchpad(應用程式)裡打開「其他」>「磁碟工具程式」 在開啟的視窗左側找到你的外接硬碟或隨身碟,單擊「清除」按鈕。 介面上會彈出一個視窗要你確認是否要清除硬碟,現在先不要急著點「清除」。 你可以看到視窗中的「格式」和「架構」下各有下拉選單,選擇不同的格式與架構可以決定你的硬碟是否可用於 Mac 或 Window...
[C# 筆記] Threading - C# Producer Consumer Thread Introduction
有了多執行緒,可以進行大量的工作, 如果將其分解為各個執行緒可以處理的部分,是有意義的。 回顧 回顧一下之前的範例,現在有這個數據陣列,我們實際上有5億bytes,我將它們視為整數, 而這個數據陣列會先放入隨機的數字,陣列再平均劃分成大致相等的部分,讓執行緒去工作。 也就是說,我將該陣列劃分4部分,每個執行緒都被賦予了自己的陣列部分去工作, 在將這些數據分配出去...
[C# 筆記] Threading - Divide and Conquer Example Part 3
承上範例,模擬大數據在使用單一執行緒和多執行緒後的時間上的效率差異 Threading - Divide and Conquer Example Part 3 修改for的可讀性 這段for 迴圈太長了,為增加可讀性調整一下… //加總 for (int i = portionNumberAsInt * portionSize; i < portionNumberAsInt * ...
[C# 筆記] Threading - Divide and Conquer Example Part 2
這個範例,耗費10.92秒,其實可以做得更好… internal class Program { static byte[] values = new byte[500000000]; static void GenerateInts() { var rnd = new Random(); for (int i = 0; i <...
[C# 筆記] Threading - Divide and Conquer Example Part 1
模擬:單執行緒處理很多數字的運算 先寫一個可以產生很多整數的方法 internal class Program { static byte[] values = new byte[500000000]; //因為需要很多整數,會造成內存不足的異常,所以用byte static void GenerateInts() { var rnd = new ...