任务循环起始偏移列表



我正试图循环浏览任务列表,并将每个任务的开始时间偏移特定的秒数,如:

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循环启动一个新的Task,该Task将在自己的线程上等待delayTime,然后在启动延迟后立即启动task

您应该awaitTask.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;
});

或者使用CCD_ 8使当前线程进入休眠状态。

Int32 delayTime = 1500;
List<Task> tasks = new List<Task>();
// .... add stuff to task list.
tasks.ForEach(task =>
{
Thread.Sleep(delayTime);
task.Start();
delayTime += 1500;
});

请参阅此SO问题,了解何时应使用DelaySleep

最新更新