現在、C# アプリケーションを作成しています。私は ConcurrentDictionary を使用するのが初めてなので、スレッドの安全性についていくつか質問があります。まず、これは私の辞書です:
/// <summary>
/// A dictionary of all the tasks scheduled
/// </summary>
private ConcurrentDictionary<string, ITask> tasks;
これをクラスでインスタンス化し、ITask を実装するすべてのオブジェクトを追跡するために使用します。マルチスレッド環境でセットアップが正しく機能することを確認したい。
複数のスレッドが ConcurrentDictionary 内の項目数を取得したい場合、ロックする必要がありますか?
ディクショナリから特定のキーを取得し、そのキーのオブジェクトを取得してメソッドを呼び出したい場合、ロックする必要がありますか? 例えば:
/// <summary>
/// Runs a specific task.
/// </summary>
/// <param name="name">Task name.</param>
public void Run(string name)
{
lock (this.syncObject)
{
var task = this.tasks[name] as ITask;
if (task != null)
{
task.Execute();
}
}
}
ITask の Execute メソッドを呼び出すために、複数のスレッドが Run メソッドを呼び出す可能性があることに注意してください。私の目標は、すべてをスレッド セーフにし、可能な限りパフォーマンスを高めることです。