Thread.Sleep(): それがしばしば悪い考えである理由
Thread.Sleep()
はプログラミングでは一般的なメソッドですが、その欠点がよく批判されます。 この記事では、なぜ問題があるのかを説明し、より良い代替案を提案します。
Thread.Sleep()
Thread.Sleep()
はいくつかの重要な問題を抱えています:
Thread.Sleep(n)
を呼び出しても、正確な n ミリ秒の一時停止は保証されません。 オペレーティング システムのスレッド スケジュールにより、実際の遅延はさらに長くなる可能性があります。Thread.Sleep()
でスレッドをブロックすると、これらのリソースが不必要に拘束されます。より良い代替案: WaitHandles
非同期待機の場合は、WaitHandles
が優れた選択肢です。これにより、スレッドはアプリケーションを完全にブロックすることなく、特定のイベントまたはシグナルを待つことができます。
例:
ポーリングに Thread.Sleep()
を使用する欠陥のある例を見てみましょう:
<code class="language-csharp">while (true) { doSomework(); Thread.Sleep(5000); }</code>
WaitHandle
を使用したより効率的なソリューション:
<code class="language-csharp">AutoResetEvent waitHandle = new AutoResetEvent(false); while (true) { doSomework(); waitHandle.WaitOne(5000); }</code>
Thread.Sleep()
が受け入れられる場合
Thread.Sleep()
が適切となる状況は限られています:
重要なポイント
Thread.Sleep()
は単純に見えますが、リソースの効率が悪く、タイミングが不正確で、動作がブロックされるため、ほとんどの非同期プログラミング タスクには適していません。 WaitHandles
マルチスレッド アプリケーションでスレッド同期を管理するための、より堅牢かつ効率的なアプローチを提供します。
以上がなぜコードでthread.sleep()を避ける必要があるのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。