C# での非同期初期化の単一実行の確保
非同期プログラミングでは、初期化プロシージャが 1 回だけ実行されることを保証することが重要です。 InitializeAsync()
メソッドによる非同期初期化が必要なクラスを想像してください。 複数のスレッドがこのメソッドを同時に呼び出さないようにすることが重要です。 SemaphoreSlim
を使用することもできますが、より効率的で洗練された方法が存在します。
AsyncLazy: 合理化されたソリューション
標準の .NET クラスの拡張である AsyncLazy
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
は、非同期初期化を確実に 1 回実行するための堅牢で使いやすい方法を提供します。そのシンプルさは、重要な初期化関数への同時呼び出しを防ぐのに最適です。
以上がC# で非同期初期化を確実に 1 回実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。