非同步方法的單次呼叫:一種穩健的方法
在非同步程式設計中,防止多次呼叫一個方法至關重要,特別是在初始化期間。 重複或併發執行可能會導致資料不一致和應用程式錯誤。 雖然 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中文網其他相關文章!