在 C# 中實作通用超時機制
程式設計中,常常需要對程式碼執行設定時間限制,防止長時間運行的進程阻塞或使應用程式停滯。為此,實現一種通用的有效超時機制至關重要。
假設您有一個方法,通常在 30 秒內完成,但您希望在超過一分鐘時終止其執行。如何在不針對特定方法硬編碼超時的情況下實現這一點呢?
幸運的是,C# 透過一種通用的超時實作方法提供了解決方案。讓我們探索一個實際範例。
超時機制
我們的目標是建立一個名為 CallWithTimeout
的方法,該方法將在指定的逾時時間內執行單行程式碼或匿名委託。如果逾時,則應停止委託執行並拋出 TimeoutException
異常。
實作細節
關鍵的挑戰在於在逾時後終止委託執行。這是透過巧妙地使用包裝委託和線程操作來實現的。
BeginInvoke
,它啟動非同步執行。傳回的 IAsyncResult
物件的 AsyncWaitHandle
屬性用於檢查委託是否在逾時時間內完成。 EndInvoke
來完成其執行。但是,如果超時,AsyncWaitHandle
將返回 false
,指示委託仍在運行。在這種情況下,將使用 threadToKill.Abort()
終止執行緒。 catch
區塊捕獲,並拋出 ThreadAbortException
來表示委託已提前終止。 用法
每當您需要確保特定程式碼在預先定義的時間範圍內執行時,都可以在程式碼中的多個位置使用 CallWithTimeout
方法。透過將委託和超時時間作為參數傳遞,您可以輕鬆配置和執行定時操作。
結論
在 C# 中實作通用的逾時機制可讓您有效控制委託和執行緒的執行時間。提供的範例演示了一個強大且優雅的解決方案,其中包括終止長時間運行的任務的能力。這種方法有助於防止死鎖,並確保您的應用程式保持回應和高效能。
以上是如何在 C# 中實現通用逾時機制以防止長時間運行的進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!