मैं एक सलाहकार द्वारा लिखे गए कुछ कोड की समीक्षा कर रहा हूं, और जब दर्जनों लाल झंडे पहले से ही पॉप अप कर चुके हैं, तो मैं निम्नलिखित स्निपेट के आसपास अपना सिर नहीं लपेट सकता:
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
ताला (नई वस्तु ()) यहाँ क्या कर रहा है? किसी भी तरह का कोई प्रभाव नहीं होना चाहिए क्योंकि यह हमेशा किसी अन्य ऑब्जेक्ट पर लॉक होता है, लेकिन इस तरह की लॉकिंग पूरे कोड में लगातार होती है, यहां तक कि गैर-कॉपी-और-पेस्ट किए गए हिस्सों में भी। क्या यह सी # भाषा में कुछ विशेष मामला है जो किसी ऐसी चीज के लिए संकलित है जिसके बारे में मुझे नहीं पता है, या प्रोग्रामर ने कुछ कार्गो पंथ को अपनाया है जो कुछ समय पहले काम करने के लिए हुआ था?
new object()
एक क्षेत्र में कहां संग्रहीत किया गया था, और उस क्षेत्र कोlock()
बयानों में उपयोग किया गया था , और वे इसे इनलाइन नहीं करना बेहतर जानते थे।