Bezpečnost vlákna v regulárních výrazech

Samotná Regex třída je bezpečná a neměnná (jen pro čtení). To znamená, že regex objekty lze vytvořit v libovolném vlákně a sdílené mezi vlákny; odpovídající metody lze volat z libovolného vlákna a nikdy měnit žádný globální stav.

Objekty výsledku (Match a MatchCollection) vrácené regulárním výrazem by však měly být použity v jednom vlákně. I když jsou mnohé z těchto objektů logicky neměnné, jejich implementace by mohly zpozdit výpočet některých výsledků, aby se zlepšil výkon, a v důsledku toho volající musí serializovat přístup k nim.

Pokud je potřeba sdílet objekty výsledků Regex ve více vláknech, lze tyto objekty převést na instance bezpečné pro přístup z více vláken voláním jejich synchronizovaných metod. S výjimkou enumerátorů jsou všechny třídy regulárních výrazů bezpečné pro vlákno nebo lze převést na objekty bezpečné pro přístup z více vláken synchronizovanou metodou.

Jediným výjimkou jsou enumerátory. Aplikace musí serializovat volání do výčtu kolekce. Pravidlo je, že pokud je možné vytvořit výčet kolekce na více než jednom vlákně současně, měli byste synchronizovat metody enumerátoru v kořenovém objektu kolekce procházené enumerátorem.

Viz také