System.Threading.ConcurrentQueue.TryDequeue
yöntemi, geçen gün beni tamamen şaşırtmış bir istisna attı. İşte yığın izleme: İlk baştaHata mı?
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()
Sorun TryDequeueCore
kötü değerle Random
yapıcı denilen olduğunu düşünüyorum. Ancak daha fazla araştırma, TryDequeueCore
'un varsayılan kurucuyu çağırdığını ortaya koymaktadır.
.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
mülkiyet belgelerine olarak diyor: error Random
yapıcı olduğu gibi bana bakıyor
olarak 32 bit işaretli bir tam sayı. Sistem sürekli çalışır Sonuç olarak, eğer , TickCount .. :: Int32 sıfırdan artar. MaxValue yaklaşık 24.9 gün, daha sonra bir negatif bir sayı olan Int32 .. ::. MinValue, atlamak, daha sonra artırmak Bir sonraki 24.9 gün içinde sıfır. (SistemYani, istisna olacak.int.MaxValue
milisaniye kadar olmuştur sonra) o tek milisaniye süre içindeRandom
yapıcısı ararsanız
Herkesin bir çözümü var mı? Kendi kodum için, TickCount
değerini alan ve int.MinValue
için denetleyen CreateRandom
yöntemini yapabilirim. Ama üzerinde kontrolüm olmayan kodlar hakkında ne yapmalıyım?
Umarım RTL takımı bunu .NET 4.0'da düzeltir.
Güncelleştirme 2009/07/22: BCL Ekibi bu hataya yanıt verdi ve bir sonraki sürüm için çözümlendiğini söyledi.
Umarım bir rapor hazırlamışsınızdır :) – n3rd
Vay, güzel bir araştırma. Microsoft Connect'te – GManNickG
Hata bildirildi. https://connect.microsoft.com/VisualStudio Hata # 475447. –