Странное поведение Thread.Sleep & Task.Delay - PullRequest
0 голосов
/ 25 ноября 2018

Я начал разрабатывать простой консольный метроном и заметил, что что-то пошло не так с синхронизацией между ударами.

После того, как я установил темп и запустил метроном, какое-то время звуковые сигналы работают должным образом, а затем он нарушает монотонный ритм и начинает воспроизводить неточный звуковой сигнал со странным ритмом.

Кроме того, продолжительность звукового сигнала начинает сокращаться (сокращается) по мере увеличения темпа.


Я всегда получал ошибку через несколько секунд при 200 мс, так что простопротестируйте его в этом темпе, но когда вы уменьшите его (т.е. увеличьте разрыв между звуковыми сигналами), проблема будет возникать позже и позже, пока не исчезнет полностью (примерно через 7-800 мс).

Кстати,не имеет значения, какой метод я использую (Sleep или Delay) ...


Здесь очень упрощенный код, содержащий проблему.

using System;
using System.Threading;
using System.Threading.Tasks;

namespace Temporary
{
    class Program
    {
        static void Main()
        {
            while (true)
            {
                Console.Beep(2000, 200);
                Thread.Sleep(200);
                //Task.Delay(200).Wait();
            }
        }
    }
}

Любая идея, что этоошибка и как я могу это исправить?Спасибо!

...