首頁 > 後端開發 > C++ > 如何保證異步方法的單次呼叫?

如何保證異步方法的單次呼叫?

DDD
發布: 2025-01-13 21:22:45
原創
599 人瀏覽過

How Can I Guarantee a Single Invocation of an Asynchronous Method?

非同步方法的單次呼叫:一種穩健的方法

在非同步程式設計中,防止多次呼叫一個方法至關重要,特別是在初始化期間。 重複或併發執行可能會導致資料不一致和應用程式錯誤。 雖然 SemaphoreSlim 提供了一種解決方案,但更簡化的方法是使用 AsyncLazy<T>

AsyncLazy<T> 提供延遲計算、非同步計算的值。 透過使用非同步操作初始化 AsyncLazy<bool>,可以確保單次執行。

這是為此目的最佳化的改進的AsyncLazy<T>實作:

<code class="language-csharp">public class AsyncLazy<T> : Lazy<Task<T>>
{
    public AsyncLazy(Func<T> valueFactory) :
        base(() => Task.Run(valueFactory)) { }

    public AsyncLazy(Func<Task<T>> taskFactory) :
        base(() => Task.Run(() => taskFactory())) { }

    public TaskAwaiter<T> GetAwaiter() { return Value.GetAwaiter(); }
}</code>
登入後複製

使用很簡單:

<code class="language-csharp">private AsyncLazy<bool> asyncLazy = new AsyncLazy<bool>(async () =>
{
    await DoStuffOnlyOnceAsync();
    return true;
});</code>
登入後複製

注意:bool 回傳型別是佔位符; 這裡沒有使用DoStuffOnlyOnceAsync的回傳值。

這個AsyncLazy<T>實作提供了一種乾淨而有效的方法來確保單一非同步方法調用,在初始化期間保持應用程式資料的完整性。

以上是如何保證異步方法的單次呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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