ホームページ >バックエンド開発 >C++ >C# で非同期初期化を確実に 1 回実行するにはどうすればよいですか?

C# で非同期初期化を確実に 1 回実行するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-13 21:49:43221ブラウズ

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

C# での非同期初期化の単一実行の確保

非同期プログラミングでは、初期化プロシージャが 1 回だけ実行されることを保証することが重要です。 InitializeAsync() メソッドによる非同期初期化が必要なクラスを想像してください。 複数のスレッドがこのメソッドを同時に呼び出さないようにすることが重要です。 SemaphoreSlim を使用することもできますが、より効率的で洗練された方法が存在します。

AsyncLazy: 合理化されたソリューション

標準の .NET

クラスの拡張である AsyncLazyLazy は、非同期初期化用に設計されています。シンプルで効果的なソリューションを提供します。

<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。