首頁 >後端開發 >C++ >C#非同步初始化如何保證單次執行?

C#非同步初始化如何保證單次執行?

Susan Sarandon
Susan Sarandon原創
2025-01-13 21:49:43223瀏覽

How Can I Ensure Single Execution of Asynchronous Initialization in C#?

確保 C# 中非同步初始化的單次執行

在非同步程式設計中,必須確保初始化過程僅運行一次。 想像一個類別需要透過 InitializeAsync() 方法進行非同步初始化。 防止多個執行緒同時呼叫此方法是關鍵。雖然可以使用 SemaphoreSlim,但有更有效率、更優雅的方法。

AsyncLazy:簡化的解

AsyncLazy 是標準 .NET Lazy 類別的擴展,專為非同步初始化而設計。它提供了一個簡單而有效的解決方案。

<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>

使用 AsyncLazy 很簡單。實例化它,提供非同步初始化邏輯:

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

總結

AsyncLazy 提供了一種健全且使用者友好的方法來確保非同步初始化的單次執行。它的簡單性使其成為防止並發呼叫關鍵初始化函數的理想選擇。

以上是C#非同步初始化如何保證單次執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn