首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 委派與事件進階:執行緒、非同步回呼與意義總結

     編輯:關於C語言

委派的關鍵應用場景

1. 執行緒啟動

ThreadStart 是無參無回傳的委派型別:


var thread = new Thread(new ThreadStart(DoWork));
// 或簡寫
var thread = new Thread(DoWork);
void DoWork() { /* 執行緒邏輯 */ }

2. 非同步程式設計模型 (APM) 回呼

委派提供 BeginInvoke/EndInvoke 支援非同步呼叫:


public delegate void MyDelegate(int source);

MyDelegate del = ProcessData;
del.BeginInvoke(42, ar =>
{
    try
    {
        del.EndInvoke(ar);
        Console.WriteLine("非同步完成");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"錯誤:{ex.Message}");
    }
}, null);

void ProcessData(int src) { /* 耗時運算 */ }

注意:現代 C# 應優先使用 async/await + Task,APM 已不推薦新專案使用。

委派的核心意義

  1. 提升復用性:演算法與資料處理分離,策略模式基石
  2. 型別安全的函式指標:編譯期檢查簽名相容
  3. 事件機制基礎:事件本質是受限的委派欄位
  4. 支援多播:透過 +=/-= 組合多個目標方法

委派鏈


Action chain = null;
chain += x => Console.WriteLine($"A: {x}");
chain += x => Console.WriteLine($"B: {x}");
chain(10); // 依序執行 A、B

chain -= x => Console.WriteLine($"A: {x}"); // 移除
chain(20); // 僅執行 B

總結建議

  • 新專案優先 Func<T, TResult>、Action<T>、Predicate<T> 內建委派
  • 事件公開用 event 關鍵字,防止外部直接呼叫/清空委派鏈
  • 非同步流程改用 Task、ValueTask、IAsyncEnumerable
  • 避免在熱路徑頻繁建立委派實例,考慮快取或靜態委派
本文配套原始碼下載
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved