2009-03-23 11 views
36

मैं सोच रहा था कि जब आप मल्टीथ्रेडिंग से निपट रहे हैं तो आप सही तरीके से ट्रांज़ेक्शनस्कोप क्लास का उपयोग कैसे करेंगे?लेनदेनस्कोप और बहु-थ्रेडिंग

हम अपने मुख्य धागे में एक नया दायरा बनाते हैं और फिर हम कुछ कार्यकर्ता धागे से उत्पन्न होते हैं और हम चाहते हैं कि वे मुख्य दायरे में भाग लें, ताकि उदाहरण के लिए प्रत्येक कार्यकर्ता को रोलबैक कहा जाता है यदि दायरा कभी नहीं होता पूरा कर लिया है।

मैंने थ्रेडस्टैटिक एट्रिब्यूट का उपयोग करके ट्रांज़ेक्शनस्कोप के बारे में कुछ पढ़ा है जो उपरोक्त असंभव/बहुत मुश्किल बना देता है - क्या कोई भी किसी भी तरीके से सत्यापित कर सकता है? यदि हम सिंक्रोननाइज्ड फैशन में कोड चलाते हैं तो रोलबैक काम करते हैं, यानी आंतरिक लेनदेन मुख्य लेनदेन में भाग लेने में सक्षम होते हैं, लेकिन अगर हम थ्रेडेड निष्पादन पर स्विच नहीं करते हैं।

धन्यवाद

+1

अच्छा सवाल; यह एक परिदृश्य है जिसे मैंने "ऐसा नहीं किया" के रूप में खारिज कर दिया था, लेकिन जांच के बाद, निर्भर निर्भरता के माध्यम से समर्थन है। मैंने कुछ सीखा, धन्यवाद। –

उत्तर

28

MSDN देखें:

तुम भी TransactionScope और अनुप्रयोगों के उपयोग की आवश्यकता है कि के लिए DependentTransaction वर्ग का उपयोग करना चाहिए कई फ़ंक्शन कॉल या एक से अधिक धागा कॉल में एक ही लेन-देन ।

तो शायद DependentTransaction पर गौर - विशेष रूप से, वहाँ एक कार्यकर्ता धागा उदाहरण, here है।

+0

मैंने इन दो ब्लॉग पोस्टों को भी उपयोगी पाया: http://www.pluralsight.com/community/blogs/jimjohn/archive/2005/04/14/7332.aspx और http://www.pluralsight.com/community/ ब्लॉग/जिमजोहन/संग्रह/2005/05/01/7923.aspx –

+2

यह एकता है, कि ब्लॉग अब नहीं मिला है – Kiquenet

+0

@Kiquenet [इन] जैसे मामलों में (http://web.archive.org/web/2/http : //pluralsight.com/community/blogs/jimjohn/archive/2005/04/14/7332.aspx) [दो] (http://web.archive.org/web/2/http://pluralsight.com /community/blogs/jimjohn/archive/2005/05/01/7923.aspx), वहां (लगभग) हमेशा [wayback मशीन] (https://en.wikipedia.org/wiki/Wikipedia:Using_the_Wayback_Machine#Latest_archive_copy) –

17

यह सही है: TransactionScope कक्षा Transaction.Current संपत्ति का उपयोग करती है जो उस क्षेत्र में अपना मूल्य संग्रहीत करती है, जो ThreadStatic विशेषता के साथ चिह्नित है।

ThreadStatic विशेषता यह सुनिश्चित करती है कि फ़ील्ड मान थ्रेड एफ़िनिटी प्राप्त हो, यानी प्रत्येक धागे में इसका अद्वितीय मूल्य है। के भीतर एक थ्रेड साझा करने के लिए यह अनुशंसित दृष्टिकोण है। इसे Thread Local Storage (टीएलएस) के रूप में भी जाना जाता है।

TransactionScope कक्षा वर्तमान धागे में एक लेनदेन संदर्भ को परिभाषित करता है। इसका मतलब यह नहीं है कि, आपके कोड को उस थ्रेड में सभी नौकरी को पूरा करना होगा। मैं एक जटिल गणना एल्गोरिदम की कल्पना कर सकता हूं जो एकाधिक धागे का उपयोग करता है।

संबंधित मुद्दे