スレッド セーフ

Regex クラス自体はスレッド セーフであり、変更不可 (読み込み専用) です。つまり、任意のスレッドで Regex オブジェクトを作成し、それを複数スレッドで共有できます。一致メソッドは任意のスレッドから呼び出すことができますが、グローバルな状態を変更することはありません。

ただし、Regex から返される結果オブジェクト (Match および MatchCollection) は、シングル スレッドで使用する必要があります。そのようなオブジェクトの多くは論理的には変更できません。ただし、それらの実装では、いくつかの結果の計算を遅らせることで、パフォーマンスの向上を図る場合があります。このため、それらのオブジェクトへのアクセスを、呼び出し元でシリアル化する必要が生じます。

Regex の結果オブジェクトを複数スレッドで共有する必要がある場合は、同期化されたメソッドを呼び出すことによって、それらのオブジェクトをスレッド セーフなインスタンスに変換できます。列挙子を例外として、すべての正規表現クラスはスレッド セーフであるか、または同期化されたメソッドによってスレッド セーフなオブジェクトに変換できます。

列挙子は唯一の例外です。アプリケーションは、コレクション列挙子への呼び出しをシリアル化する必要があります。あるコレクションを複数のスレッドで同時に列挙できる場合は、列挙子の対象となるコレクションのルート オブジェクトで、列挙子メソッドを同期させる必要があるという決まりがあります。

参照

その他の技術情報

.NET Framework の正規表現