.NET 非同期プログラミングでは、特定のイベントがトリガーされるまで実行を一時停止する必要があることがよくあります。 ポーリングやスレッドブロッキングなどの従来の方法は非効率的であり、過度のリソースを消費します。 幸いなことに、Modern .NETは、イベント駆動型の非同期実行に優れたソリューションを提供しています。 同期のためにsemaphoreslimをレバレッジする
クラスは、堅牢なシグナル伝達メカニズムを提供します。 インスタンスは信号として機能し、別のスレッドが解放されるまでスレッドを待つことができます。 この例を考えてみましょう:
タスク管理にtaskcompletionsourceを使用するSemaphoreSlim
代わりに、SemaphoreSlim
<code class="language-csharp">private SemaphoreSlim signal = new SemaphoreSlim(0, 1); // Release the signal when the "Continue" button is pressed private void ButtonContinue_Click(object sender, RoutedEventArgs e) { signal.Release(); } // Await the signal in `GetResults` private async Task GetResults() { await signal.WaitAsync(); // Proceed after signal release }</code>
概要
TaskCompletionSource
Task
<code class="language-csharp">private TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>(); // Complete the task when the "Continue" button is pressed private void ButtonContinue_Click(object sender, RoutedEventArgs e) { tcs.SetResult(true); } // Await the task in `GetResults` private async Task GetResults() { await tcs.Task; // Proceed after task completion }</code>
以上が.NETで効率的なイベントベースの非同期実行を達成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。