9
  1. क्या .NET क्लास System.Net.CookieContainer थ्रेड सुरक्षित है? - अद्यतन: वर्तकुंजी ने उत्तर दिया -
  2. क्या असीमित अनुरोधों (यानी HttpWebRequest.CookieContainer) के दौरान संशोधित चर के लिए थ्रेड सुरक्षितता सुनिश्चित करने का कोई तरीका है?
  3. क्या थ्रेड सुरक्षित कक्षाओं को हाइलाइट करने के लिए कोई विशेषता है? - अद्यतन: यदि एमएसडीएन पर धागा-सुरक्षितता का वर्णन किया गया है तो शायद उनके पास इसके लिए कोई विशेषता नहीं है -
  4. क्या सभी .NET कक्षाएं थ्रेड सुरक्षित हैं? - अद्यतन: मार्क answered--

मैं इन सवालों को पूछने क्योंकि मैं एक बहु-कोड में अतुल्यकालिक अनुरोधों में CookieContainer का उपयोग करें। और मैं एक ताला के अंदर एक asynchrounous अनुरोध नहीं डाल सकता है। हो सकता है कि मुझे केवल पढ़ने योग्य "चर" (या अपरिवर्तनीय प्रकार) का उपयोग करना होगा जैसे F # में, है ना?क्या .NET System.Net.CookieContainer थ्रेड सुरक्षित है?

+0

मैं दूसरी बार फिर से अपडेट करूँगा, बस सबकुछ बंद करने के लिए ... –

उत्तर

4

नहीं, सभी .NET कक्षाएं थ्रेड सुरक्षित नहीं हैं। वास्तव में, बहुत कम होने की आवश्यकता है। आम तौर पर, स्थिर सदस्यों को धागा-सुरक्षित होना चाहिए, लेकिन यह इसके बारे में है।

अपरिवर्तनीय/अर्ध-अपरिवर्तनीय वस्तुएं स्वचालित रूप से थ्रेड सुरक्षित होती हैं (इसमें XslTransform इत्यादि जैसी चीजें शामिल होती हैं) - और वहां एक परिवर्तनीय कुछ मामले (जैसे थ्रेडेड कंटेनर) हैं जहां आप चीजों को सुरक्षित होने की उम्मीद कर सकते हैं। एमएसडीएन प्रत्येक वर्ग के लिए थ्रेड-सुरक्षा बताता है।

मुझे कुकी-कंटेनर थ्रेड-सुरक्षित होने की कोई उम्मीद नहीं होगी, इसलिए आपको शायद इसे स्वयं सिंक्रनाइज़ करना होगा।

(अपडेटेड)

अपना दूसरा बिंदु पुनः करें; आप किस चर के बारे में सोच रहे हैं? आपके स्वयं के स्थानीय राज्य चर सीधे एसिंक अनुरोध के दौरान अपडेट नहीं किए जाएंगे, इसलिए प्रतिक्रियाओं को संसाधित करते समय अनुरोध तैयार करते समय पहुंच को सिंक्रनाइज़ करने के लिए यह आपके पास आता है। सबसे अधिक, एक Monitor के माध्यम से - यानी

lock(syncLock) { 
    // prepare request from (synchronized) state 
    req.Begin{...} 
} 

और फिर कॉलबैक

lock(syncLock) { 
    // ...read values from request... 
    // ...update local state... 
} 

कहाँ syncLock बस एक ताला वस्तु (शायद एक उदाहरण के खिलाफ आयोजित) है में:

private readonly object syncLock = new object(); 
+0

मुझे बिल्कुल पता नहीं है कि किस बिंदु पर HttpWebRequest.CookieContainer अपडेट किया गया है, लेकिन मुझे लगता है कि यह async अनुरोध के दौरान है। –

+0

ठीक है, क्या आपको एक ही ऑब्जेक्ट से समवर्ती अनुरोध करने की आवश्यकता है? क्या आपके पास अलग-अलग कुकी-कंटेनर वाले एकाधिक HttpWebRequest ऑब्जेक्ट्स नहीं हो सकते हैं? तो कोई संघर्ष नहीं है। –

5

horses mouth से:

थ्रेड सुरक्षा

किसी भी सार्वजनिक स्थैतिक (विजुअल बेसिक में साझा) इस प्रकार के सदस्यों धागा सुरक्षित हैं। किसी भी इंस्टेंस सदस्यों को थ्रेड सुरक्षित होने की गारंटी नहीं है।

संपादित करें:

आप कार्रवाई है कि उदाहरण के सदस्यों को संशोधित चारों ओर एक ताला डाल सकता है।

0

सभी .NET ढांचे में स्थिर वर्गों को माइक्रोसॉफ्ट द्वारा थ्रेड सुरक्षित होने की गारंटी है।

आप परावर्तक का उपयोग कर इसे सत्यापित कर सकते हैं।

1

बस एक टिप्पणी, एक वेब पेज अपने HTTP जबाब के हिस्से के रूप में एक modifed कुकी सूची भेजता है। CookieContainer संशोधित करने के बाद जबाब anything-- पूरा नहीं होगा तो आप सिर्फ अब मौजूद नहीं है कि एक पृष्ठ अनुरोध के कुकी संग्रह संशोधित करेंगे भेज दिया गया है।

2

जैसा कि मैंने देखा (प्रतिबिंबक की मदद से), कुकी कोंटेनर आंतरिक रूप से अपने सदस्यों तक पहुंचने के लिए ताले का उपयोग करता है, इसलिए दस्तावेज़ीकरण के बावजूद यह थ्रेड सुरक्षित होना चाहिए।

वैसे, इसमें कोई सार्वजनिक स्थैतिक सदस्य बिल्कुल नहीं है। तो मुझे ऐसा लगता है कि दस्तावेज़ीकरण केवल एक मानक नोटिस प्रदान करता है।

+0

और यहाँ .NET कोर के लिए ... https://github.com/dotnet/corefx/blob/1c3a3e6aad27daf3ce53edcae10ಳ69ef31866c/src/System.Net.Primitives/src/System/Net/CookieContainer.cs –