Я разрабатываю Windows 10 Universal App в C#/Xaml, я использую await Task.Delay (delayInMilliseconds), чтобы приостановить метод для заданного времени. Мой сценарий несколько в реальном времени, поэтому он очень чувствителен к изменениям времени, и мне нужно убедиться, что, когда я приостановил метод, скажем, 8 миллисекунд, он будет приостановлен на 8 миллисекунд. Я заметил, что фактический временной интервал, для которого ** Task.Delay ** приостанавливает метод, отличается от того, что передается как параметр задержки, в течение 1 до 30 мс, причем длина «отклонения» различна для каждого вызова. Итак, когда я хочу спать в течение 8 миллисекунд, моя система спит от 9 до 39 миллисекунд, и это полностью разрушает мой сценарий. Итак, мой вопрос: какой лучший способ заменить ** Task.Delay ** и добиться хорошей точности? В настоящее время я использую этот метод:Точность задачи.Delay
public static void Delay1(int delay)
{
long mt = delay * TimeSpan.TicksPerMillisecond;
Stopwatch s = Stopwatch.StarNew();
while (true)
{
if (s.Elapsed.TotalMilliseconds > delay)
{
return;
}
}
}
но guees он потребляет много ресурсов, то есть 100% от сердечника процессора. Если у пользователя небольшое количество ядер процессора, это будет очень мало.
Task.Delay не является таймером и не предназначен для точного определения времени. Дело не только в том, что он использует System.Threading.Timer (http://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/Task.cs,5fb80297e082b8d6.references), но также несут расходы планируя его продолжение в потоке ThreadPool. Разрешение [разрешение по таймеру составляет 15,6 мс] (http://stackoverflow.com/questions/3744032/why-are-net-timers-limited-to15-ms-resolution), поэтому вы просите о выходе из limits –
Что вы пытаетесь сделать? Зачем вам такая высокая точность? Возможно, есть и другие * способы достижения одного и того же. Я не могу придумать ** любой случай, когда универсальное приложение требует точности на уровне ядра. Вы пытаетесь контролировать анимацию или воспроизведение звука? –
@Panagiotis Kanavos: Да, именно, я пытаюсь контролировать анимацию, воспроизведение звука и использование сети, поэтому мне нужна такая точность. – xcoder37