Как правильно ставить паузы в методах, которые будут запускаться в 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?