List<T>.ICollection.SyncRoot Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene un oggetto che può essere usato per sincronizzare l'accesso a ICollection.
property System::Object ^ System::Collections::ICollection::SyncRoot { System::Object ^ get(); };
object System.Collections.ICollection.SyncRoot { get; }
member this.System.Collections.ICollection.SyncRoot : obj
ReadOnly Property SyncRoot As Object Implements ICollection.SyncRoot
Valore della proprietà
Oggetto che può essere utilizzato per sincronizzare l'accesso a ICollection. Nell'implementazione predefinita di List<T>, questa proprietà restituisce sempre l'istanza corrente.
Implementazioni
Commenti
Le implementazioni predefinite di raccolte nello spazio dei nomi System.Collections.Generic non sono sincronizzate.
L'enumerazione di una raccolta non è di per sé una procedura thread-safe. Per assicurare la protezione del thread durante l'enumerazione, è possibile bloccare la raccolta durante l'intera enumerazione. Per consentire l'accesso alla raccolta in lettura e scrittura da parte di più thread, è necessario implementare la propria sincronizzazione.
SyncRoot restituisce un oggetto che può essere usato per sincronizzare l'accesso ICollectiona . La sincronizzazione è efficace solo se tutti i thread bloccano questo oggetto prima di accedere alla raccolta. Il codice seguente mostra l'uso SyncRoot della proprietà per C#, C++e Visual Basic.
ICollection ic = ...;
lock (ic.SyncRoot)
{
// Access the collection.
}
Dim ic As ICollection = ...
SyncLock ic.SyncRoot
' Access the collection.
End SyncLock
ICollection^ ic = ...;
try
{
Monitor::Enter(ic->SyncRoot);
// Access the collection.
}
finally
{
Monitor::Exit(ic->SyncRoot);
}
Il recupero del valore di questa proprietà è un'operazione O(1).