Thread safety nelle espressioni regolariThread Safety in Regular Expressions

La classe Regex è thread-safe e non modificabile (di sola lettura).The Regex class itself is thread safe and immutable (read-only). Ciò significa che è possibile creare oggetti Regex in qualsiasi thread e condividerli fra i thread; i metodi corrispondenti possono essere chiamati da qualsiasi thread e non modificano in nessun caso uno stato globale.That is, Regex objects can be created on any thread and shared between threads; matching methods can be called from any thread and never alter any global state.

Tuttavia, gli oggetti risultato (Match e MatchCollection) restituiti da Regex vanno usati in un unico thread.However, result objects (Match and MatchCollection) returned by Regex should be used on a single thread. Sebbene molti di questi oggetti non siano modificabili a livello logico, le loro implementazioni potrebbero ritardare l'elaborazione di determinati risultati per migliorare le prestazioni; di conseguenza, i chiamanti dovranno serializzare l'accesso a tali oggetti.Although many of these objects are logically immutable, their implementations could delay computation of some results to improve performance, and as a result, callers must serialize access to them.

Se risulta necessario condividere oggetti risultato Regex su più thread, tali oggetti possono essere convertiti in istanze thread-safe chiamando i relativi metodi sincronizzati.If there is a need to share Regex result objects on multiple threads, these objects can be converted to thread-safe instances by calling their synchronized methods. Fatta eccezione per gli enumeratori, tutte le classi di espressioni regolari sono thread-safe o possono essere convertite in oggetti thread-safe mediante un metodo sincronizzato.With the exception of enumerators, all regular expression classes are thread safe or can be converted into thread-safe objects by a synchronized method.

L'unica eccezione è costituita dagli enumeratori.Enumerators are the only exception. Un'applicazione deve serializzare le chiamate agli enumeratori di raccolta.An application must serialize calls to collection enumerators. La regola indica che se una raccolta può essere enumerata in più thread contemporaneamente, è necessario sincronizzare i metodi di enumeratore sull'oggetto radice della raccolta attraversata dall'enumeratore.The rule is that if a collection can be enumerated on more than one thread simultaneously, you should synchronize enumerator methods on the root object of the collection traversed by the enumerator.

Vedere ancheSee Also

Espressioni regolari .NET.NET Regular Expressions