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

Comment puis-je garantir une exécution unique de l'initialisation asynchrone en C# ?

Susan Sarandon
Libérer: 2025-01-13 21:49:43
original
272 Les gens l'ont consulté

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

Assurer une exécution unique de l'initialisation asynchrone en C#

En programmation asynchrone, il est essentiel de garantir que les procédures d'initialisation ne s'exécutent qu'une seule fois. Imaginez une classe nécessitant une initialisation asynchrone via une méthode InitializeAsync(). Il est essentiel d’empêcher plusieurs threads d’appeler simultanément cette méthode. Bien que SemaphoreSlim puisse être utilisé, des méthodes plus efficaces et plus élégantes existent.

AsyncLazy : une solution rationalisée

AsyncLazy, une extension de la classe standard .NET Lazy, est conçue pour l'initialisation asynchrone. Il offre une solution simple et efficace.

<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

Utiliser AsyncLazy est simple. Instanciez-le, en fournissant votre logique d'initialisation asynchrone :

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

Résumé

AsyncLazy fournit une méthode robuste et conviviale pour garantir une exécution unique de l'initialisation asynchrone. Sa simplicité le rend idéal pour empêcher les appels simultanés aux fonctions d'initialisation critiques.

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