C# でのユニバーサル タイムアウト メカニズムの実装
プログラミングにおける一般的なニーズは、指定されたタイムアウトでコードを実行できるようにすることです。これは、完了までに時間がかかりすぎる可能性のある外部システムまたはコードを扱う場合に重要になります。共通のタイムアウト メカニズムを実装すると、コード ベース全体で一貫した動作が可能になり、応答しないコードが適切な方法で処理されるようになります。
この場合の目標は、指定されたタイムアウト内で任意のコードを実行できる汎用メソッドを作成することです。このソリューションでは、コードがタイムアウトを超えた状況を適切に処理し、その実行を停止するメカニズムを提供する必要があります。
これを実現するエレガントな方法は、デリゲートを使用することです。次のコード スニペットは、アクション デリゲートとミリ秒単位のタイムアウト値を受け入れる CallWithTimeout という名前の汎用タイムアウト メソッドを示しています。
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(); } }
このユニバーサル タイムアウト メカニズムを使用すると、開発者は応答しない外部システムやコード ブロックからコードを簡単に保護できます。これにより、アプリケーションの堅牢な動作が促進され、潜在的な例外の処理が強化されます。
以上がC# で汎用タイムアウト メカニズムを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。