У меня есть этот код:Почему этот код выполняется быстрее, чем ожидалось?
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
Если я увеличиваю сон более чем второй этого не происходит.
Во-первых, это в режиме выпуска или отладки? Во-вторых, используйте таймер, а не только просмотр выхода на консоль - нет никакой гарантии, что консоль сразу отобразит информацию. –
находится в режиме отладки – Malfist
Вы уверены, что это не буферизация на консоли? – annakata