C# ユニバーサル コード実行タイムアウト メカニズム: 完全ガイド
ソフトウェア開発では、コード ブロックの実行時間を制御することが重要です。特に、API 呼び出しやデータベース クエリなど、信頼性が低く時間のかかる外部依存関係を扱う場合には重要です。これを行うには、単一行のコードにタイムアウトを設定する一般的な方法が必要です。
ユニバーサル タイムアウト メカニズムを実装します
ユニバーサル タイムアウト メカニズムの構築の中核は、長時間実行されるコードを終了し、発生する可能性のあるエラーを阻止することです。このために、階層化されたソリューションを採用できます:
CallWithTimeout
など) を作成します。このメソッドは、別のスレッドでコードの実行を開始し、進行状況を追跡するためにラッピング デリゲートをアタッチします。 TimeoutException
をスローします。 実際の操作
具体的な実装の詳細は次のとおりです:
<code class="language-csharp">class Program { static void Main(string[] args) { // 设置 6000 毫秒(6 秒)的超时 CallWithTimeout(FiveSecondMethod, 6000); // 设置 4000 毫秒(4 秒)的超时 CallWithTimeout(FiveSecondMethod, 4000); } static void FiveSecondMethod() { Thread.Sleep(5000); } } 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>
この実装により、実行に対する柔軟性と洗練された制御を提供しながら、明確に定義されたタイムアウトでコードを実行できます。
以上がC# でコードを実行するための汎用タイムアウト メカニズムを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。