c# - ManualResetEvent.WaitOne() returning false without timeout? -
इसके अलावा मैनुअल रीसेट एवेन्यू.वेटऑन ()
के कारण false
वापस आएगा एक समय समाप्त?
हमारे पास WaitOne (3600000)
को कॉल है जो कि false
के साथ लगभग पांच मिनट के बाद लौट रहा है।
यह व्यवहार केवल 300 में से एक सर्वर पर देखा जाता है। हम उस विशेष सर्वर के बारे में अभी तक अलग नहीं हुए हैं। कॉल एक विंडोज़ सेवा में है जो .NET 4.0 का उपयोग करता है।
जिस कोड पर हम कॉल का उपयोग करते हैं वह मूल रूप से इस तरह दिखता है:
if (tracker.WaitOne (timeout)) {लॉग ("सफलता"); वापसी; लॉग ("टाइम आउट"); नया अपवाद फेंक (...);
हमें लगभग पांच मिनट (बिल्कुल नहीं) के बाद "समयबद्ध" लॉग प्राप्त होता है।
ध्यान दें कि समय-समय पर सामान्यतः एक घंटा नहीं होता है। हमने परीक्षण के लिए समय-सीमा बढ़ा दी है क्योंकि यह अपेक्षित से पहले का समय था आम तौर पर समयबाह्य दस मिनट के लिए कॉन्फ़िगर किया गया है। अधिकतर रनों में ट्रैकर एक सेकेंड से कम में सेट ()
है, हालांकि शायद ही कभी इसे कुछ मिनट लग सकते हैं।
मैंने यह भी देखा कि क्या कुछ निपटान हो सकता है प्रतीक्षा संभाल लेकिन यह एकमात्र स्थान तय हो जाता है जिसके बाद इसे सेट हो जाता है। मैंने यह भी जाँच किया है कि सेट के बाद डिस्प्लेक्शन बंद होने पर प्रतीक्षा संभाल गलत तरीके से लौटने और .NET 4 और .NET 4.5 पर अपने परीक्षणों में हो सकता है। प्रतीक्षा संभाल हमेशा सही साबित होता है, जब निपटान तुरंत सेट के बाद कहा जाता है।
यदि यह एक सर्वर पर हो रहा है, और विश्वसनीय रूप से जल्दी समय समाप्त हो रहा है (60 की जगह 5 मिनट) मैं उस मशीन पर विचार कर सकता हूं कुछ अजीब घड़ी की समस्या हो रही है।जवाब ईमानदारी से है कि यह गलत नहीं लौटाता है जब तक कि समय समाप्त नहीं हो जाता है (जाहिर है, समय समाप्ति सटीक नहीं है, लेकिन यह दूर नहीं होना चाहिए, और अधिक होने की संभावना 'जल्दी' की तुलना में 'देर से' हो) और इसलिए या तो आपके दावे को किसी तरह गलत है या संभवतः यहां तक कि हार्डवेयर स्तर पर कुछ भी वास्तव में उस सर्वर के साथ वास्तव में गलत है।
Comments
Post a Comment