任务列表循环开始偏移量
List of Tasks Loop Start Offset
我正在尝试遍历任务列表并将每个任务的开始偏移特定的秒数,例如:
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
"Creates a cancellable task that completes after a specified time interval." (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
与 Sleep
。
我正在尝试遍历任务列表并将每个任务的开始偏移特定的秒数,例如:
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
"Creates a cancellable task that completes after a specified time interval." (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
与 Sleep
。