私は現在C#アプリケーションを作成しています。私はConcurrentDictionaryを使うのが初めてであるので、スレッドの安全性に関していくつか質問があります。まず、これは私の辞書です: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();
}
}
}
複数のスレッドがRunメソッドを呼び出して、ITaskのExecuteメソッドを呼び出すことができます。私の目的は、すべてのスレッドを安全かつパフォーマンスの高いものにすることです。
は '.count'プロパティのスレッドセーフですか?または '.Count()'メソッドを使用していますか?違いはなんですか? – Zapnologica