ユーザーの入力を待っている非同期操作を効率的に一時停止します
非同期プログラミングでは、ボタンクリックなどのユーザーインタラクションまで、長期にわたるタスクを一時停止する必要があることがよくあります。 この記事では、特定のイベントがトリガーされるまでGetResults
のような非同期メソッドを一時停止するときに、忙しい待機の効率的な代替案を探ります。
非効率的なポーリングを回避
イベントを継続的にチェックするという従来のアプローチ(忙しいポール)は非常に非効率的です。 イベント駆動型ソリューションは、よりエレガントでパフォーマンスのあるアプローチを提供します 同期にsemaphoreslimを使用するクラスは、堅牢なセマフォベースのソリューションを提供します。 開始カウント0と最大カウント1のセマフォを初期化します。「継続」ボタンのイベントハンドラーは、を使用してセマフォをリリースします。 の中で、セマフォがリリースされるまで
のブロック実行をブロックします。
SemaphoreSlim
イベントシグナリングのためのタスクコムプレティオンセスを活用するRelease()
GetResults
await signal.WaitAsync()
あるいは、
<code class="language-csharp">private SemaphoreSlim signal = new SemaphoreSlim(0, 1); private void ButtonContinue_Click(object sender, RoutedEventArgs e) { signal.Release(); } private async Task GetResults() { await signal.WaitAsync(); // Continue processing }</code>
このタスクを待ち、完了まで実行を一時停止します。
これらのイベント駆動型の方法は、ユーザーイベントに基づいて非同期メソッドを一時停止して再開するためのクリーンで効率的な方法を提供し、忙しい待機のパフォーマンスオーバーヘッドを排除します。以上がイベントが発生するまで非同期メソッドを一時停止する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。