我正试图循环浏览任务列表,并将每个任务的开始时间偏移特定的秒数,如:
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
。
您应该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;
});
或者使用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问题,了解何时应使用Delay
与Sleep
。