Maison > développement back-end > C++ > Comment puis-je garantir une exécution unique des méthodes d'initialisation asynchrone en C# ?

Comment puis-je garantir une exécution unique des méthodes d'initialisation asynchrone en C# ?

Linda Hamilton
Libérer: 2025-01-13 21:48:42
original
606 Les gens l'ont consulté

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

Exécution unique de méthodes d'initialisation asynchrone en C#

Dans le développement C#, il est essentiel de garantir que les méthodes d'initialisation asynchrones ne s'exécutent qu'une seule fois. Cela évite les conditions de concurrence dans lesquelles plusieurs threads tentent simultanément la même initialisation, conduisant à des erreurs potentielles. Alors que SemaphoreSlim fournit une solution, AsyncLazy<T> du package Microsoft.Extensions.Primitives offre une approche plus élégante et efficace.

Tirer parti d'AsyncLazy

AsyncLazy<T> fournit une initialisation paresseuse pour les opérations asynchrones. Il encapsule une tâche asynchrone, vous permettant d'attendre sa fin en utilisant GetAwaiter(). Une classe AsyncLazy<T> légèrement modifiée est présentée ci-dessous :

<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>
Copier après la connexion

Application pratique

Utiliser AsyncLazy<T> est simple. Instanciez-le avec votre logique d'initialisation sous forme d'expression lambda :

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

Pour exécuter l'initialisation, attendez simplement l'objet asyncLazy :

<code class="language-csharp">await asyncLazy;</code>
Copier après la connexion

Résumé

AsyncLazy<T> fournit un mécanisme propre et efficace pour garantir une exécution unique des méthodes d'initialisation asynchrone. Il simplifie le développement en éliminant les complexités du verrouillage manuel ou de la gestion des sémaphores, ce qui donne un code plus lisible et maintenable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal