Heim >Backend-Entwicklung >C++ >Wie kann ich die einmalige Ausführung der asynchronen Initialisierung in C# sicherstellen?

Wie kann ich die einmalige Ausführung der asynchronen Initialisierung in C# sicherstellen?

Susan Sarandon
Susan SarandonOriginal
2025-01-13 21:49:43223Durchsuche

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

Sicherstellung der einmaligen Ausführung der asynchronen Initialisierung in C#

Bei der asynchronen Programmierung ist es wichtig sicherzustellen, dass Initialisierungsprozeduren nur einmal ausgeführt werden. Stellen Sie sich eine Klasse vor, die eine asynchrone Initialisierung über eine InitializeAsync()-Methode benötigt. Es ist wichtig zu verhindern, dass mehrere Threads diese Methode gleichzeitig aufrufen. Obwohl SemaphoreSlim verwendet werden könnte, gibt es effizientere und elegantere Methoden.

AsyncLazy: Eine optimierte Lösung

AsyncLazy, eine Erweiterung der Standardklasse .NET Lazy, ist für die asynchrone Initialisierung konzipiert. Es bietet eine einfache und effektive Lösung.

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

Die Verwendung von AsyncLazy ist unkompliziert. Instanziieren Sie es und stellen Sie Ihre asynchrone Initialisierungslogik bereit:

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

Zusammenfassung

AsyncLazy bietet eine robuste und benutzerfreundliche Methode, um die einmalige Ausführung der asynchronen Initialisierung sicherzustellen. Aufgrund seiner Einfachheit ist es ideal, um gleichzeitige Aufrufe kritischer Initialisierungsfunktionen zu verhindern.

Das obige ist der detaillierte Inhalt vonWie kann ich die einmalige Ausführung der asynchronen Initialisierung in C# sicherstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn