在C#中實現通用的超時機制
程式設計中一個常見的需求是能夠執行具有指定逾時的程式碼。當處理外部系統或可能需要長時間才能完成的程式碼時,這變得至關重要。實現通用的超時機制允許在整個程式碼庫中保持一致的行為,確保以適當的方式處理無回應的程式碼。
在這種情況下,目標是建立一個通用的方法,該方法可以在指定的超時時間內執行任何給定的程式碼。解決方案應該優雅地處理程式碼超過超時的情況,並提供一種停止其執行的機制。
實現此目的的優雅方法是使用委託。以下程式碼片段示範了一個名為CallWithTimeout的通用超時方法,該方法接受一個Action委託和一個以毫秒為單位的超時值:
<code class="language-csharp">static void CallWithTimeout(Action action, int timeoutMilliseconds) { Thread threadToKill = null; Action wrappedAction = () => { threadToKill = Thread.CurrentThread; try { action(); } catch(ThreadAbortException ex){ Thread.ResetAbort();// 取消强制中止,以便更好地完成。 } }; IAsyncResult result = wrappedAction.BeginInvoke(null, null); if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds)) { wrappedAction.EndInvoke(result); } else { threadToKill.Abort(); throw new TimeoutException(); } }</code>
在此方法中,建立一個單獨的執行緒來執行給定的操作。控制執行的關鍵是使用一個包裝的委託,該委託捕獲對線程的引用。如果操作超過逾時時間,則優雅地中止執行緒並拋出TimeoutException。
透過使用這種通用的超時機制,開發人員可以輕鬆地保護其程式碼免受無回應的外部系統或程式碼區塊的影響。它促進了健壯的應用程式行為,並增強了對潛在異常的處理。
以上是如何在 C# 中實現通用超時機制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!