Informations
Le sujet que vous avez demandé est indiqué ci-dessous. Toutefois, ce sujet ne figure pas dans la bibliothèque.

ICollection.SyncRoot, propriété

Obtient un objet qui peut être utilisé pour synchroniser l'accès à ICollection.

Espace de noms :  System.Collections
Assembly :  mscorlib (dans mscorlib.dll)

Object SyncRoot { get; }

Valeur de propriété

Type : System.Object
Objet qui peut être utilisé pour synchroniser l'accès à ICollection.

Pour les collections dont le magasin sous-jacent n'est pas disponible publiquement, l'implémentation attendue consiste à retourner l'instance actuelle. Notez que le pointeur vers l'instance actuelle peut ne pas être suffisant pour les collections qui encapsulent d'autres collections ; ceux-là doivent retourner la propriété SyncRoot de la collection sous-jacente.

La plupart des classes de collection dans l'espace de noms System.Collections implémentent également une méthode Synchronized qui fournit un wrapper synchronisé autour de la collection sous-jacente. Toutefois, les classes dérivées peuvent fournir leur propre version synchronisée de la collection à l'aide de la propriété SyncRoot. Le code de synchronisation doit effectuer les opérations sur la propriété SyncRoot de la collection, et non directement sur la collection. Cela garantit un fonctionnement correct des collections dérivées d'autres objets. Plus particulièrement, la synchronisation est assurée avec les autres threads qui pourraient modifier simultanément l'instance de la collection.

En l'absence d'une méthode Synchronized sur une collection, l'utilisation attendue pour SyncRoot ressemble à ce qui suit :


ICollection myCollection = someCollection;
lock(myCollection.SyncRoot)
{
    // Some operation on the collection, which is now thread safe.
}


L'énumération d'une collection n'est intrinsèquement pas une procédure thread-safe. Même lorsqu'une collection est synchronisée, les autres threads peuvent toujours modifier la collection, ce qui entraîne la levée d'une exception par l'énumérateur. Afin de garantir la cohérence de thread au cours de l'énumération, vous pouvez soit verrouiller la collection pendant l'ensemble de l'énumération, soit intercepter les exceptions résultant des modifications apportées par les autres threads.

L'exemple de code suivant montre comment verrouiller la collection à l'aide de la propriété SyncRoot au cours de l'énumération entière.


ICollection myCollection = someCollection;
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}


.NET Framework

Pris en charge dans : 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Bibliothèque de classes portable

Pris en charge dans : Bibliothèque de classes portable

.NET pour les applications du Windows Store

Pris en charge dans : Windows 8

.NET pour les applications Windows Phone

Pris en charge dans : Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Ajouts de la communauté

Afficher:
© 2014 Microsoft