हमने हाल ही में कुछ मौकों पर सवाल उठाया है, जहां सवाल आया है कि डायनेमिक्स सीआरएम 2011 में, एक प्लगइन निष्पादन (यानी Execute()
विधि का एक पास) उसी धागे पर रहने की गारंटी है।सीआरएम 2011 प्लगइन में थ्रेडिंग/परिवेश संदर्भ
मैं किसी भी वर्ग में ट्रेसिंग सेवा को पार करने से बचने के लिए परिवेश संदर्भ पैटर्न का उपयोग करके ट्रेसिंग को कार्यान्वित करना चाहता हूं जो ट्रेस करना चाहें। समस्या यह है कि जैसा कि हम जानते हैं कि प्लगइन केवल पंजीकृत चरण में एक बार तत्काल होता है और फिर उसी घटना से सभी बाद के संचालनों को पूरा करता है; इसका मतलब है कि मेरे पास Tracing.Current
जैसी कुछ स्थिर संपत्ति नहीं हो सकती है, जिसमें मैं वर्तमान ITracingService
उदाहरण असाइन करता हूं और मुझे जाना अच्छा लगता है। अगर मैंने ऐसा किया, तो ऑपरेशन आखिरी बार शुरू होने वाले सभी अन्य परिचालनों के लिए उदाहरण को ओवरराइट करेगा जो कि अभी भी चल रहा है (और इस प्रकार की सहमति असामान्य नहीं है)।
अगर मुझे यकीन है कि सब कुछ के तहत Execute()
विधि एक ही धागे में रहता है, मैं अभी भी एक परिवेश प्रसंग स्थिर क्षेत्रों के लिए [ThreadStatic]
विशेषता का उपयोग इस्तेमाल कर सकते हैं हो सकता है:
public static class Tracing
{
[ThreadStatic]
private static ITracingService _current;
public static ITracingService Current
{
get
{
if (null == _current)
{
_current = new NullTracingService();
}
return _current;
}
set { _current = value; }
}
}
मैं प्रवेश करते समय यह तय करेगा Execute()
विधि और अंत में इसे साफ़ करें ताकि ट्रेसिंग सेवा उदाहरण का संदर्भ हटा दिया जाएगा। जो कुछ भी परिणाम मेरी समस्या के संबंध में हो सकता है -
केवल एक चीज मैं की तरह MSCRM प्लगइन्स के संदर्भ में सूत्रण के बारे में पता कर सकते हैं कि जाहिरा तौर पर अलग-अलग धागे ThreadPool से आते हैं।
क्या किसी के पास एमएससीआरएम प्लगइन्स के साथ थ्रेडिंग को कैसे संभाला जाता है, इस बारे में कोई गहन अंतर्दृष्टि है - या इस विशेष मामले में सोलिड कोड के साथ ट्रेसिंग की क्रॉस-कटिंग चिंता को सुन्दर तरीके से कैसे संभाला जा सकता है इस बारे में कोई अन्य विचार (एओपी/गतिशील अवरोध नहीं है यहां विकल्प)?
किसी भी मदद और पॉइंटर्स के लिए धन्यवाद।
मैं थ्रेड सुरक्षित तरीके से चलने के बारे में आपकी चिंता को समझता हूं, लेकिन मुझे यकीन नहीं है कि मैं समझता हूं कि आप एक ही थ्रेड पर चलने के बारे में चिंतित क्यों हैं। क्या आप थोड़ा और समझा सकते हैं? – Daryl
खैर, मुझे प्लगइन निष्पादन को अपने स्वयं के आईट्रैसिंग सेवा उदाहरण "संलग्न" के बिना किसी अन्य थ्रेड में स्थानांतरित करने से बचने की आवश्यकता होगी। मैं अभी तक यह पता लगाने में सक्षम नहीं हूं कि इस तरह के मामले में थ्रेडस्टैटिक चीज़ को कैसे संभाला जाएगा। – TeaDrivenDev