vb.net - Simultaneous threads only one seems to function at a time? -


थ्रेड a + b , (दोनों फाइलें हटाने का प्रयास कर रहे हैं )। एक को पहले कहा जाता है, फिर बी जबकि a अभी भी चल रहा है एक फ़ाइल को सफलतापूर्वक हटाता है, लेकिन एक नहीं करता।

अगर मैं अपने स्वयं के एक चलाता हूँ, एक की फ़ाइल ठीक हटा देता है।

मैं देख सकता हूँ जब मैं कोड के माध्यम से कदम है कि के MultiAttemptFilename के साथ ओवरराइट हो जाता है के।

मुझे समझ में नहीं आ रहा है।

मेरे पास एक अजैक्स कॉल है जो सामान्य हैंडलर को इंगित करता है जो इसके साथ फाइलनाम को पास करता है। मेरी हैंडलर में मैं निम्नलिखित कोड है:

  मंद डीसी नया दस्तावेज़ मंद MyThread नई थ्रेड के रूप में (AddressOf Dc.DeleteFileMulitAttempt) Dc.MulitAttemptFilename = फ़ाइल का नाम MyThread.Start के रूप में ()  < / पूर्व> 

मेरे 'दस्तावेज़' वर्ग से मैं निम्नलिखित फोन कर रहा हूँ:

  #Region "हटाएँ" लोक MulitAttemptFilename स्ट्रिंग = "" सार्वजनिक उप DeleteFileMulitAttempt () मंद TimeBetweenAttempts पूर्णांक के रूप में के रूप में = 2000 मंद NumberOfAttempts पूर्णांक = 60 मंद AttemptNumber के रूप में पूर्णांक = 0 मंद सफलता बूलियन = झूठी जबकि (AttemptNumber & LT; NumberOfAttempts) के रूप में के रूप में की कोशिश करो सफलता = (DeleteFile (MulitAttemptFilename) = "ठीक है") पकड़ने पूर्व अपवाद सफलता = झूठी अंत तो प्रयास करें के रूप में (सफलता) फिर बाहर निकलें जबकि Thread.Sleep (TimeBetweenAttempts) AttemptNumber + = 1 अंत जबकि अंत तो End Sub ...   

यह के रूप में वे हमेशा नहीं रद्द कर दिया संभाल करने / अपलोड विफल रहे है तुरंत हटाएं (सर्वर ताले आदि), इसलिए लूप

मैं कुछ यहाँ मौलिक लापता है?

ऐसा लगता है कि आप अनुपलब्ध हो सकता है बहु-थ्रेडेड संगामिति की मौलिक अवधारणा इसमें पुस्तकों को समर्पित है, और अक्सर एनएटीटी पुस्तकों के अनुभाग इस मुद्दे को संबोधित करेंगे। यहाँ केवल विषय पर है

एक छोटा जवाब है कि आपको वीबी के "लॉक" कीवर्ड का उपयोग करना होगा। आप एक ऑब्जेक्ट बनाते हैं और आप मोटे तौर पर

  लॉक (yourLockObject) {// किसी भी कोड की तरह कुछ कर सकते हैं जो कि एक साझा संसाधन जैसे कि वेरिएबल // मल्टीटाअेटमपफाइलनाम [इस प्रकार] यहां जा सकते हैं। }   

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

Comments