Réaliser une initialisation asynchrone à usage unique : une approche supérieure
Un défi de programmation fréquent consiste à exécuter une méthode asynchrone critique une seule fois. Bien que SemaphoreSlim
puisse y parvenir, AsyncLazy
propose une solution plus élégante et concise.
Présentation d'AsyncLazy : une solution rationalisée
AsyncLazy
est essentiellement un Lazy<T>
modifié conçu pour les opérations asynchrones. Il initialise paresseusement une valeur lors du premier accès, parfaitement adapté à la gestion des initialisations asynchrones uniques.
Détails de mise en œuvre
Voici comment utiliser AsyncLazy
pour vous assurer que votre initialisation asynchrone ne s'exécute qu'une seule fois :
<code class="language-csharp">private AsyncLazy<bool> asyncLazy = new AsyncLazy<bool>(async () => { await DoStuffOnlyOnceAsync(); return true; });</code>
Cela crée une instance AsyncLazy
encapsulant la logique d'initialisation asynchrone dans DoStuffOnlyOnceAsync
. Le résultat est une tâche paresseuse qui s'exécute uniquement au premier accès.
Exemple d'utilisation
Pour déclencher l'initialisation et attendre sa fin, utilisez simplement GetAwaiter()
:
<code class="language-csharp">var isInitialized = await asyncLazy.GetAwaiter();</code>
Cela lancera DoStuffOnlyOnceAsync
(s'il n'a pas déjà été exécuté) et renverra un booléen indiquant le succès.
Résumé
AsyncLazy
fournit une méthode propre et efficace pour assurer une exécution unique d'une méthode asynchrone cruciale. En encapsulant l'initialisation dans une tâche paresseuse, il simplifie le code et offre un moyen convivial d'accéder au résultat.
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!