下面是这个问题的简单代码演示,只需几秒钟后执行StartQueueJob()然后执行ShowResult(), 在这里,我在几次测试后列出了一些测试结果:
在8核CPU Win7 64位PC,.NetFramework 4.0 VS2010 pro上进行了测试。单击鼠标触发函数,单击btn运行StartQueueJob(),然后单击几秒钟后运行ShowResult()。
我有两个问题:
为什么有时线程计数!= Data.Count?
为什么有时线程计数<算数?
List<int> Data = new List<int>();
int ForCount = 0;
int ThreadCount = 0;
private void StartQueueJob( )
{
int iLoop = Convert.ToInt32(numericUpDown2.Value);
Data = new List<int>(iLoop);
ForCount = 0;
ThreadCount = 0;
for (int k = 0; k < iLoop; k++)
{
ForCount += 1;
ThreadPool.QueueUserWorkItem(
(obj) =>
{
ThreadCount++;
Data.Add(ThreadCount);
});
}
}
private void ShowResult()
{
Console.WriteLine(String.Format("Loop count: {3}, For count: {0}, Thread count: {1}, Data.Count: {2} ", new object[] { ForCount, ThreadCount, Data.Count, numericUpDown2.Value }));
}