System.Threading.ConcurrentQueue.TryDequeue
विधि ने दूसरे दिन एक अपवाद फेंक दिया जो मुझे आश्चर्य से पूरी तरह से ले गया। यहाँ स्टैक ट्रेस है:सिस्टम में बग। रैंडम कन्स्ट्रक्टर?
System.OverflowException: Negating the minimum value of a twos complement number is invalid.
at System.Math.AbsHelper(Int32 value)
at System.Random..ctor(Int32 Seed)
at System.Threading.Collections.ConcurrentQueue`1.TryDequeueCore(T& result)
at System.Threading.Collections.ConcurrentQueue`1.TryDequeue(T& result)
at MyProgram.ThreadProc() in c:\MyProgram\Main.cs:line 118
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
पहले तो मैंने सोचा था कि समस्या यह है कि TryDequeueCore
एक बुरा मान के साथ Random
निर्माता कहा जाता था। लेकिन आगे की जांच से पता चलता है कि TryDequeueCore
डिफ़ॉल्ट कन्स्ट्रक्टर को कॉल करता है। यह मेरे लिए लग रहा है त्रुटि की तरह Random
निर्माता में है:
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 12 (0xc)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call int32 System.Environment::get_TickCount()
IL_0006: call instance void System.Random::.ctor(int32)
IL_000b: ret
} // end of method Random::.ctor
System.Environment.TickCount
संपत्ति के लिए दस्तावेज़ के रूप में कहते हैं:
इस संपत्ति के मूल्य प्रणाली टाइमर से ली गई है और संग्रहीत किया जाता है एक 32-बिट हस्ताक्षरित पूर्णांक के रूप में। नतीजतन, यदि सिस्टम लगातार चलता है, टिककंट शून्य से Int32 .. :: अधिकतम 24.9 दिनों के लिए अधिकतम वैल्यू, फिर Int32 पर जाएं .. :: MinValue, जो ऋणात्मक संख्या है, फिर वृद्धि अगले 24.9 दिनों के दौरान वापस शून्य पर।
तो, अगर आपको लगता है कि एक मिलीसेकंड अवधि के दौरान Random
निर्माता फोन (के बाद सिस्टम int.MaxValue
मिलीसेकेंड के लिए साइन किया गया है), यह इस अपवाद फेंकने के लिए जा रहा है।
क्या किसी के पास कोई कामकाज है? अपने कोड के लिए, मैं CreateRandom
विधि बना सकता हूं जो TickCount
मान प्राप्त करता है और इसे int.MinValue
के लिए जांचता है। लेकिन कोड के बारे में क्या करना है जिसका मेरा कोई नियंत्रण नहीं है?
मुझे उम्मीद है कि आरटीएल टीम इसे .NET 4.0 में ठीक करेगी।
अद्यतन 2009/07/22: बीसीएल टीम ने बग का जवाब दिया और कहा कि इसे अगली रिलीज के लिए हल किया गया है।
मुझे आशा है कि आपने एक बग रिपोर्ट बनाई है :) – n3rd
वाह, अच्छी जांच। माइक्रोसॉफ्ट कनेक्ट पर – GManNickG
बग की सूचना दी गई। https://connect.microsoft.com/VisualStudio बग # 475447। –