不指定委託類型的通用FromEvent 方法
問題陳述:
目前,基於事件建立任務需要為每個事件中的每個事件定義自訂的FromEvent 方法班級。這可能會變得麻煩且重複。目標是開發一個通用的 FromEvent 方法,可以處理任何物件上的任何事件。
挑戰:
遇到的主要挑戰是:
- 在程式碼中將事件當作字串(例如「OnCompletion」)傳遞只會因事件而引發錯誤可在= 或-= 運算子的左側存取。
- 事件的委託在運行時未知,需要變化。
- 發出 IL 以設定事件的結果TaskCompletionSource 是動態的。
解決方案:
綜合解決方案涉及:
- 動態方法建立:
- Reflection: 使用反射檢索事件的 EventHandlerType 屬性並建立委託來自發出的 DynamicMethod。
- 取代通用類型: 利用TaskFromEvent 擴充方法,而不是手動指定委託類型(例如,TaskFromEvent),如下程式碼所示:
此方法支援任何傳回類型和參數的事件清單。它消除了對樣板程式碼的需要,並允許無縫且可重複使用地處理來自各種物件的事件。
以上是我們如何在 C# 中建立一個通用的「FromEvent」方法來處理任何類型和參數清單的事件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!