タイムアウトメカニズムを入力してコンソールを入力します
コンソールアプリケーションは、多くの場合、ユーザーの入力を示すために
メソッドを使用します。ただし、特に自動化シナリオでは、ユーザーの応答時間を制限する必要がある場合があります。これは質問につながります:タイムアウトメカニズムを追加するために、この状況にどのように対処しますか?
Console.ReadLine()
完全な解決策Console.ReadLine()代替機能、異常な行動、または複数の呼び出しの場合にリソース集中待機など、以前のソリューションにはいくつかの制限があるかもしれませんが、この高度なソリューションはこれらの問題を効果的に解決します。
このソリューションの利点
予約機能:他の方法とは異なります
。<code class="language-csharp">class Reader { private static Thread inputThread; private static AutoResetEvent getInput, gotInput; private static string input; static Reader() { getInput = new AutoResetEvent(false); gotInput = new AutoResetEvent(false); inputThread = new Thread(reader); inputThread.IsBackground = true; inputThread.Start(); } private static void reader() { while (true) { getInput.WaitOne(); input = Console.ReadLine(); gotInput.Set(); } } public static string ReadLine(int timeOutMillisecs = Timeout.Infinite) { getInput.Set(); bool success = gotInput.WaitOne(timeOutMillisecs); if (success) return input; else throw new TimeoutException("用户未在规定时间内提供输入。"); } public static bool TryReadLine(out string result, int timeOutMillisecs = Timeout.Infinite) { getInput.Set(); bool success = gotInput.WaitOne(timeOutMillisecs); if (success) { result = input; return true; } else { result = null; return false; } } }</code>
管理複数の呼び出し:複数のスレッドやデッドロックを生成せずに連続コールが正常に実行できるようにします。
忙しい待機を排除します:以上がConsole.readline()にタイムアウトを追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。