Как правильно ставить паузы в методах, которые будут запускаться в Thread(метод)?

Допустим есть метод:

public void WriteTo10sec()
{
    Console.WriteLine("begin");
    Thread.Sleep(10000);
    Console.WriteLine("finish");
}

и этот метод запускается в создаваемых потоках 10 раз:

for(int i=0;i<10;i++)
{
    Thread th = new Thread(WriteTo10sec);
    th.Start();
}

пишут, что Thread.Sleep - блокирует основной поток, и есть альтернатива Task.Delay, тогда как правильно переписать метод WriteTo10sec, чтобы сохранялась пауза? вариант:

public void WriteTo10sec()
{
    Console.WriteLine("begin");
    Task.Delay(10000).Wait();
    Console.WriteLine("finish");
}

делает задержку, но иногда гораздо больше, чем 10 сек и пишут, что Wait, так же блокирует основной поток - верно ли это? можно ли задать точную паузу в методе WriteTo10sec без блокировки основного потока и не делая этот метод асинхронным, поскольку он запускается в отдельном Thread ? т.е. не делая метод таким:

public async void WriteTo10sec()
{
    Console.WriteLine("begin");
    await Task.Delay(10000);
    Console.WriteLine("finish");
}

сейчас пробую оптимизировать код, в котором синхронный метод, который запускается в Thread, запускает в себе последовательно много других синхронных методов, в которых требуется соблюдать точные паузы. Можно ли обойтись без переписывания всего кода на асинхронный, если в конце концов метод вызывается асинхронно в Thread?


Ответы (0 шт):