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
Freigeben: 2025-01-13 21:48:42
Original
690 Leute haben es durchsucht

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:

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(); }
}
Nach dem Login kopieren

Praktische Anwendung

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

private AsyncLazy<bool> asyncLazy = new AsyncLazy<bool>(async () =>
{
    await DoStuffOnlyOnceAsync();
    return true;
});
Nach dem Login kopieren

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

await asyncLazy;
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage