首頁 > 後端開發 > C++ > 如何暫停異步方法,直到發生事件?

如何暫停異步方法,直到發生事件?

DDD
發布: 2025-01-29 16:51:11
原創
253 人瀏覽過

How to Suspend an Async Method Until an Event Occurs?

有效地暫停異步操作,等待用戶輸入

異步編程通常需要暫停長期運行的任務,直到用戶互動為止,例如單擊按鈕。 本文探討了暫停類似GetResults的異步方法時忙碌待招待的有效替代方案,直到特定事件觸發。

>避免效率低下的輪詢

>連續檢查該事件(忙碌的播放)的傳統方法效率很低。 事件驅動的解決方案提供了一種更優雅和表現的方法。

>利用信號量

>

SemaphoreSlim類提供了堅固的基於信號量的解決方案。 初始化一個信號量為0,最大計數為1。 “繼續”按鈕的事件處理程序使用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>
登入後複製

>利用事件信號的taskCompletionsource

>另外,

創建一個代表按鈕單擊結果的任務。 事件處理程序使用TaskCompletionSource<bool>完成此任務。 SetResult()等待此任務,暫停執行直到完成。 GetResults>

<code class="language-csharp">private TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();

private void ButtonContinue_Click(object sender, RoutedEventArgs e)
{
    tcs.SetResult(true);
}

private async Task GetResults()
{
    await tcs.Task;
    // Continue processing
}</code>
登入後複製
這些事件驅動的方法提供了一種基於用戶事件的暫停和恢復異步方法的干淨有效方法,從而消除了忙碌的待辦事的性能開銷。

以上是如何暫停異步方法,直到發生事件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板