मेरे पास एक बहुप्रचारित ऐप में एक अजीब बग है:क्या .NET में एक पठनीय क्षेत्र शून्य हो सकता है?
public class MyClass
{
private readonly Hashtable HashPrefs;
public MyClass(int id)
{
HashPrefs = new Hashtable();
}
public void SomeMethodCalledFromAnotherThread(string hashKey,string hashValue)
{
if (HashPrefs.Contains(hashKey)) // <-- throws NullReferenceException
{
}
}
}
एक थ्रेड करता है:
SomeQueue.Add(new MyClass(1));
और दूसरा धागा करता है:
SomeQueue.Dequeue().SomeMethodCalledFromAnotherThread(SomeClass.SomeMethod(),"const value");
लेकिन दूसरा थ्रेड कॉल कैसे हो सकता है कन्स्ट्रक्टर खत्म होने से पहले विधि खत्म हो गई है?
संपादित करें: मैंने फ़ंक्शन पैरामीटर के साथ भाग जोड़ा, क्योंकि ऐसा लगता है कि यह प्रासंगिक हो सकता है। जहां तक मैं कह सकता हूं, हैशकी को पारित किया जा सकता है, क्योंकि कुछ विधि() हमेशा एक प्रासंगिक स्ट्रिंग देता है।
जैसा कि अन्य ने इंगित किया है, अगर समस्या एक शून्य हैकके पैरामीटर शामिल है() में, अपवाद ArgumentNullException होगा।
मल्टी-थ्रेडिंग नरक में आपका स्वागत है ... –
ओह, मैं कुछ सालों से बहु-थ्रेडिंग कर रहा हूं :-(। यह केवल मेरी अनोखी त्रुटियों में से एक है जिसमें मेरा सिर कताई था। – Radu094
आपका इंस्टेंस वैरिएबल थ्रेड-विशिष्ट कैश से पढ़ा जा सकता है। मेरा संपादित उत्तर देखें। –