首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# System.Threading.Timer 第二參數為 null 的含義與垃圾回收關係解析

     編輯:程式設計綜合問答

代碼示例

Timer ticker = new Timer(TimerMethod, null, 1000, 1000);
// TimerMethod 簽名:void TimerMethod(object state)

第二參數 `state` 解析

  • 類型:`object`,可為 `null` 或任意對象。
  • 用途:作為**用戶自定義狀態**傳遞給回調方法 `TimerMethod(object state)`。例如創建多個定時器時,傳入編號區分:`new Timer(Callback, timerId, ...)`。
  • 與垃圾回收**無直接關係**。

垃圾回收警告的真實含義

MSDN 警告:「如果沒有對 Timer 的引用,Timer 會被垃圾回收,即使 Timer 仍處在活動狀態。」
針對的是 **Timer 實例本身**(即變量 `ticker`),而非 `state` 參數。若 `ticker` 變量超出作用域且無其他引用,GC 可能回收 Timer 導致回調停止。

防止過早回收的正確做法

  1. 將 `Timer` 實例存為**類級字段**(非局部變量)。
  2. 或調用 `GC.KeepAlive(ticker)` 在使用期間保持引用。
  3. 使用 `System.Timers.Timer`(組件模型)自動由容器管理生命週期。

總結

`state` 參數為 `null` 完全合法,僅表示回調不需要額外上下文。GC 回收風險針對 Timer 實例引用,與 `state` 無關。

C# System.Threading.Timer state 參數用途,垃圾回收針對 Timer 實例而非 state,防止過早回收最佳實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved