Нет доступных таймеров, которые гарантируют точность истинного времени, даже System.Threading.Timer может это сделать. Например, когда вы просите Threading.Timer срабатывать за 30 мс, это может на самом деле занять 40 мс или 200 мс. Или, если вы попросите 1 секунду, он может сработать за 1,01 секунды. Это не займет много времени, прежде чем ваше время будет неточным.
Причина этого заключается в том, что таймер делает поток обратного вызова планируемым, но планировщику потока все равно требуется время для фактического вызова потока. Различные операции, выполняемые системой, могут задержать этот обратный вызов.