【发布时间】:2009-04-03 14:49:20
【问题描述】:
我有这个代码:
public void replay() {
long previous = DateTime.Now.Ticks;
for (int i = 0; i < 1000; i++) {
Thread.Sleep(300);
long cur = DateTime.Now.Ticks;
Console.WriteLine(cur - previous);
previous = cur;
}
}
像这样作为单独的线程调用:
MethodInvoker replayer = new MethodInvoker(replay);
replayer.BeginInvoke(null, null);
但是,如果我查看输出,它的行为会很奇怪。它成对输出i。例如,它会等待一个完整的等待,然后输出i,然后也快速输出下一个i,然后再次等待。为什么会这样,我该如何纠正?
它输出这个:
3125040
2968788
2968788
2968788
3125040
2968788
2968788
2968788
3125040
2968788
2968788
2968788
3125040
如果我将睡眠时间增加到一秒以上,这不会发生。
【问题讨论】:
-
首先,这是发布模式还是调试模式?其次,使用计时器而不是仅仅观看控制台输出 - 不能保证控制台会立即显示内容。
-
你确定这不是在控制台缓冲吗?
-
查看输出,小于 5 % 的差异是循环执行之间的延迟......感知到的差异只是在显示中......
标签: c# .net multithreading execution