c#多线程不要相信Console.WriteLine!!
最近的项目上,c#的多线程把我弄得迷迷糊糊的。多线程的调试,尤其是涉及到时间相关的,是真的难调。如果不能稳定复现,那就是难上加难。当然根本原因还是我对多线程还是不熟悉,大多数时候都是照葫芦画瓢。
前几天调试我都是图方便用Console.WriteLine来跟踪程序运行状态的变化。但是看着输出的结果,真的是。。只能用神奇来形容。左看右看怎么也看不出来我的代码怎么可能得到这样的运行结果??
今天终于痛下决心,不用Console.WriteLine来输出信息,改用异步队列。想要输出信息的时候给队列加个锁往里面扔信息,单独开一个线程专心把队列里面的信息写入到文件。终于终于!我确定了不是我程序的问题,是Console.WriteLine的问题!!
Console.WriteLine的输出如下所示
异步队列产生的日志文件是酱紫的:
正常和不正常一目了然。
以后要记住,多线程的程序,还是老老实实用多线程日志库或者手写一个多线程的消息队列。别信Console.WriteLine!!