简单的程序也可以存在很多值得思考的地方,作为一名程序员或者架构师,首先要具备的就是追根和追新的心态。抓虫系列的代码我想大部分人都接触过或者犯过这样的错误,有些可能涉及的知识面很基础很浅,留个烂文在此引导新手、路人。虫子尽量将问题放大,追的深一点偏一点,如果大家有其他自己的想法或者补充也可以留爪印。
PS一下:看了下面的评论,大家有点误会虫子的意思了,此系列的博文旨在抓虫,从抓虫中关注我们的程序中容易出现的问题而并非是找寻更佳的解决方案 嘿嘿~ ~
先看原始bug程序
3 | public object Result { get ; set ; } |
4 | public int index { get ; set ; } |
03 | ManualResetEvent[] MR = new ManualResetEvent[20]; |
05 | testObj qq = new testObj(); |
07 | for ( int i = 0; i < 20; i++) |
09 | MR[i] = new ManualResetEvent( false ); |
11 | ThreadPool.QueueUserWorkItem(o => |
13 | Console.WriteLine(qq.index.ToString()); |
18 | WaitHandle.WaitAll(MR); |
|
我们的目的是让程序输出0~19。看到这里可能老鸟已经发现程序的问题了。新鸟应该还是继续查虫。老鸟们先卖个关子,虫子把问题引偏,这样好拓展更多的问题。让我们来看看运行结果。