ユーザーを一括で作成するプログラムを作成しています。作成の一部である操作が約 5 秒間ブロックされています。これを回避するために、それをスレッド化し、すべてをスレッド プールに配置しました。
私の質問は、スレッドの外側で原則を作成し、グループの原則をスレッドに渡して呼び出すgroup.Members.Add(u)
とgroup.Save()
、問題が発生する可能性があるかどうかです。各スレッド内から新しいグループ プリンシパルを生成した方がよいでしょうか?
ユーザーを一括で作成するプログラムを作成しています。作成の一部である操作が約 5 秒間ブロックされています。これを回避するために、それをスレッド化し、すべてをスレッド プールに配置しました。
私の質問は、スレッドの外側で原則を作成し、グループの原則をスレッドに渡して呼び出すgroup.Members.Add(u)
とgroup.Save()
、問題が発生する可能性があるかどうかです。各スレッド内から新しいグループ プリンシパルを生成した方がよいでしょうか?
2 つのスレッドが同じコレクション インスタンスで動作するときはいつでも、安全ではありません。UI がブロックされないようにバックグラウンド スレッドを 1 つだけ使用している場合は、バックグラウンド スレッドでグループを作成し、そこで排他的に使用します。複数のスレッドを生成して同時に Active Directory にアクセスすることで、グループへのユーザーの追加を高速化する計画がある場合、それは役に立たないと思います。
MSDNから:
この型の public static (Visual Basic では共有) メンバーはすべて、スレッド セーフです。インスタンス メンバーは、スレッド セーフであるとは限りません。
その小さなメモは、ドキュメントで非常に一般的なものです。「スレッドセーフ」の意味と同時アクセスの制御方法を決定するのは、プログラマ次第です。