實現一次性非同步初始化:一種優越的方法
一個常見的程式設計挑戰涉及僅執行一次關鍵的非同步方法。雖然 SemaphoreSlim
可以實現這一點,但 AsyncLazy
提供了更優雅和簡潔的解決方案。
AsyncLazy 簡介:簡化的解決方案
AsyncLazy
本質上是為非同步操作設計的修改版 Lazy<T>
。 它在第一次訪問時延遲初始化一個值,非常適合管理一次性非同步初始化。
實作細節
以下是如何使用 AsyncLazy
確保非同步初始化僅運行一次:
<code class="language-csharp">private AsyncLazy<bool> asyncLazy = new AsyncLazy<bool>(async () => { await DoStuffOnlyOnceAsync(); return true; });</code>
這會建立一個 AsyncLazy
實例,將非同步初始化邏輯封裝在 DoStuffOnlyOnceAsync
中。 結果是一個僅在第一次訪問時執行的惰性任務。
使用範例
要觸發初始化並等待其完成,只需使用 GetAwaiter()
:
<code class="language-csharp">var isInitialized = await asyncLazy.GetAwaiter();</code>
這將啟動 DoStuffOnlyOnceAsync
(如果尚未運行)並傳回一個表示成功的布林值。
總結
AsyncLazy
提供了一種乾淨且有效率的方法來確保關鍵非同步方法的單次執行。透過將初始化封裝在惰性任務中,它簡化了程式碼並提供了一種用戶友好的方式來存取結果。
以上是AsyncLazy 如何確保關鍵的非同步方法只會執行一次?的詳細內容。更多資訊請關注PHP中文網其他相關文章!