Мое приложение получает инструкции от моего клиента.System.Threading callback не кажется точным
В каждой инструкции я хочу выполнить код с принятой отметки времени + 10 секунд.
Чтобы проверить правильность моего кода я высмеивал этот простой тест консоли:
static DateTime d1 = DateTime.Now;
static Timer _timer = null;
static void Main(string[] args)
{
_timer = new Timer(Callback, null,200, Timeout.Infinite);
d1 = DateTime.Now;
Console.ReadLine();
}
private static void Callback(Object state)
{
TimeSpan s = DateTime.Now - d1;
Console.WriteLine("Done, took {0} secs.", s.Milliseconds);
_timer.Change(200, Timeout.Infinite);
}
На это работает я надеялся на дисплей:
Done, took 200 milsecs.
Done, took 200 milsecs.
Done, took 200 milsecs.
Done, took 200 milsecs.
Done, took 200 milsecs.
Done, took 200 milsecs.
Но это не так.
Я получаю случайные значения для «milsecs».
NB Мой фактический код не всегда будет использовать 200 миллисекунд.
Пример экрана:
Как случайных значений вы получаете? Вы имеете в виду, что он равен 5 миллисекундам, или вы получаете некоторые, которые отключены на 500 миллисекунд? Просьба уточнить. – JRLambert
Есть много таймеров, в которых вы используете Timer? Тем не менее, если вы используете System.Threading.Timer, то переключение потоков означает, что нет гарантии, что она будет выполняться ровно каждые 200 мс - это точность воспроизведения мультимедиа. –
Вы должны использовать класс [StopWatch] (http://stackoverflow.com/questions/457605/how-to-measure-code-performance-in-net), а не DateTime. –