के उपयोग के आसपास कुछ प्रश्न मैं वर्तमान में एक सी # आवेदन लिख रहा हूं। मैं एक 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();
}
}
}
मन रखते हुए एक से अधिक थ्रेड भागो विधि ITask की विधि निष्पादित फोन करने के लिए देख कह सकते हैं। मेरा उद्देश्य सब कुछ थ्रेड सुरक्षित और जितना संभव हो उतना कलाकार होना है।
'.count' संपत्ति थ्रेड सुरक्षित है? या 'गणना()' विधि? अंतर क्या है? – Zapnologica