任务循环开始偏移列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了任务循环开始偏移列表相关的知识,希望对你有一定的参考价值。
我试图遍历一个任务列表,并将每个任务的开始偏移特定的秒数,如:
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
“创建一个可在指定时间间隔后完成的可取消任务。” (source)。所以基本上你的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;
});
请参阅this SO question以了解何时应使用Delay
vs Sleep
。
以上是关于任务循环开始偏移列表的主要内容,如果未能解决你的问题,请参考以下文章