Я пытаюсь перебрать список задач и смещать начало каждой задачи на определенное количество секунд, например:
Int32 delayTime = 1500;
List<Task> tasks = new List<Task>();
// .... add stuff to task list.
tasks.ForEach(task =>
{
Task.Delay(delayTime);
task.Start();
delayTime += 1500;
});
Однако вышеупомянутое запускает все задачи вместе, не учитывая задержку задачи. Есть ли способ расположить список задач поочередно или по-другому структурировать его, чтобы каждую задачу можно было запускать через несколько секунд после запуска предыдущей?





Task.Delay «Создает отменяемую задачу, которая завершается через указанный интервал времени». (источник). Итак, в основном ваш цикл ForEach запускает новую задачу, которая будет ждать delayTime в своем собственном потоке, а затем вы запускаете task сразу после начала этой задержки.
Вы должны либо await, который звонит Task.Delay
Int32 delayTime = 1500;
List<Task> tasks = new List<Task>();
// .... add stuff to task list.
tasks.ForEach(async task =>
{
await Task.Delay(delayTime);
task.Start();
delayTime += 1500;
});
использовать Task.Delay(delayTime).Wait()
Int32 delayTime = 1500;
List<Task> tasks = new List<Task>();
// .... add stuff to task list.
tasks.ForEach(task =>
{
Task.Delay(delayTime).Wait();
task.Start();
delayTime += 1500;
});
или используйте Thread.Sleep(delayTime), чтобы перевести текущий поток в спящий режим.
Int32 delayTime = 1500;
List<Task> tasks = new List<Task>();
// .... add stuff to task list.
tasks.ForEach(task =>
{
Thread.Sleep(delayTime);
task.Start();
delayTime += 1500;
});
См. этот ТАК вопрос, чтобы узнать, когда вам следует использовать Delay против Sleep.
Спасибо. Мне не хватало .Wait (). Теперь работает. Я не хотел усыплять реальный поток из опасения, что это может остановить выполнение другой задачи в том же потоке.
вы должны дождаться задачи внутри foreach