我目前正在编写一个 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();
}
}
}
请记住,多个线程可以调用 Run 方法来调用 ITask 的 Execute 方法。我的目标是让所有东西都线程安全并尽可能高效。