2011-03-22 2 views
4

J'avais la ligne suivante dans une classe que j'utilisais. Un jour, je voulais profiter de toutes les nouveautés de .NET 4, l'installer et l'enfer.Différence entre Lazy <T> et LazyInit <T>

Mon LazyInit ne fonctionnait plus. Donc j'ai remplacé chaque occurrence avec Lazy <T> mais qu'en est-il LazyInitMode.EnsureSingleExecution?

Je pensais que ce serait LazyThreadSafetyMode.ExecutionAndPublication.

private static Lazy<LookupService> s_instance = new Lazy<LookupService>(() => new LookupService(), LazyThreadSafetyMode.ExecutionAndPublication); 

Ces deux décalages sont-ils équivalents?

Répondre

6

Effectivement, oui. En définissant LazyThreadSafetyMode.ExecutionAndPublication, vous indiquez que vous ne souhaitez qu'un seul thread capable de construire le Lazy<T>, ce qui «garantit une exécution unique» pour la phase de construction. PublicationOnly permettra à plusieurs threads d'exécuter le constructeur, mais seulement stocker un résultat (le premier terminé).

Questions connexes