首頁 > 後端開發 > C++ > 如何在 C# 中實現通用逾時機制以防止長時間運行的進程?

如何在 C# 中實現通用逾時機制以防止長時間運行的進程?

DDD
發布: 2025-01-23 12:11:13
原創
217 人瀏覽過

How Can I Implement a Generic Timeout Mechanism in C# to Prevent Long-Running Processes?

在 C# 中實作通用超時機制

程式設計中,常常需要對程式碼執行設定時間限制,防止長時間運行的進程阻塞或使應用程式停滯。為此,實現一種通用的有效超時機制至關重要。

假設您有一個方法,通常在 30 秒內完成,但您希望在超過一分鐘時終止其執行。如何在不針對特定方法硬編碼超時的情況下實現這一點呢?

幸運的是,C# 透過一種通用的超時實作方法提供了解決方案。讓我們探索一個實際範例。

超時機制

我們的目標是建立一個名為 CallWithTimeout 的方法,該方法將在指定的逾時時間內執行單行程式碼或匿名委託。如果逾時,則應停止委託執行並拋出 TimeoutException 異常。

實作細節

關鍵的挑戰在於在逾時後終止委託執行。這是透過巧妙地使用包裝委託和線程操作來實現的。

  1. 包裝委託: 我們建立一個包裝委託,在局部變數中捕捉委託的執行​​緒。這是在創建委託的方法中完成的。
  2. 非同步執行: 包裝委託作為參數傳遞給 BeginInvoke,它啟動非同步執行。傳回的 IAsyncResult 物件的 AsyncWaitHandle 屬性用於檢查委託是否在逾時時間內完成。
  3. 逾時處理: 如果委託在逾時前完成,則呼叫 EndInvoke 來完成其執行。但是,如果超時,AsyncWaitHandle 將返回 false,指示委託仍在運行。在這種情況下,將使用 threadToKill.Abort() 終止執行緒。
  4. 執行緒取消: 執行緒中止由 catch 區塊捕獲,並拋出 ThreadAbortException 來表示委託已提前終止。

用法

每當您需要確保特定程式碼在預先定義的時間範圍內執行時,都可以在程式碼中的多個位置使用 CallWithTimeout 方法。透過將委託和超時時間作為參數傳遞,您可以輕鬆配置和執行定時操作。

結論

在 C# 中實作通用的逾時機制可讓您有效控制委託和執行緒的執行時間。提供的範例演示​​了一個強大且優雅的解決方案,其中包括終止長時間運行的任務的能力。這種方法有助於防止死鎖,並確保您的應用程式保持回應和高效能。

以上是如何在 C# 中實現通用逾時機制以防止長時間運行的進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板