Heim >Backend-Entwicklung >C++ >Wie kann ich die einmalige Ausführung asynchroner Initialisierungsmethoden in C# sicherstellen?

Wie kann ich die einmalige Ausführung asynchroner Initialisierungsmethoden in C# sicherstellen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-13 21:48:42606Durchsuche

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

Einzelausführung asynchroner Initialisierungsmethoden in C#

Bei der C#-Entwicklung ist es wichtig sicherzustellen, dass asynchrone Initialisierungsmethoden nur einmal ausgeführt werden. Dies verhindert Race-Conditions, bei denen mehrere Threads gleichzeitig dieselbe Initialisierung versuchen, was zu möglichen Fehlern führen kann. Während SemaphoreSlim eine Lösung bietet, bietet AsyncLazy<T> aus dem Paket Microsoft.Extensions.Primitives einen eleganteren und effizienteren Ansatz.

AsyncLazy nutzen

AsyncLazy<T> bietet eine verzögerte Initialisierung für asynchrone Vorgänge. Es kapselt eine asynchrone Aufgabe, sodass Sie mit GetAwaiter() auf deren Abschluss warten können. Eine leicht modifizierte AsyncLazy<T>-Klasse ist unten dargestellt:

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

Praktische Anwendung

Die Verwendung von AsyncLazy<T> ist unkompliziert. Instanziieren Sie es mit Ihrer Initialisierungslogik als Lambda-Ausdruck:

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

Um die Initialisierung auszuführen, warten Sie einfach auf das asyncLazy-Objekt:

<code class="language-csharp">await asyncLazy;</code>

Zusammenfassung

AsyncLazy<T> bietet einen sauberen und effizienten Mechanismus zur Sicherstellung der einmaligen Ausführung asynchroner Initialisierungsmethoden. Es vereinfacht die Entwicklung, indem es die Komplexität der manuellen Sperrung oder Semaphorverwaltung eliminiert, was zu besser lesbarem und wartbarem Code führt.

Das obige ist der detaillierte Inhalt vonWie kann ich die einmalige Ausführung asynchroner Initialisierungsmethoden 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