我目前正在編寫一個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