如何在Task<int>列表之间插入延迟?

4

我有一个循环,创建了5个任务。每个任务之间如何插入5秒的延迟?我不知道该如何使用Task.Delay(5000)。

 var tasks = new List<Task<int>>();

 for (var i = 0; i < 5; i++)
 {  
      tasks.Add(ProcessQueueAsync());
 }

 await Task.WhenAll(tasks);

我的ProcessQueAsync方法调用服务器,检索数据并返回int。
  private async Task<int> ProcessQueAsync()
  {
     var result = await CallToServer();
     return result.Count;
  }

1
你具体指的是“插入5秒的延迟”是什么意思?任务本质上是异步的,如果可能的话它们将并行运行。你想在哪里发生延迟? - Dan Puzey
我知道想要这个可能有点疯狂。我有一个队列正在读取,因为所有五个任务同时运行,它们都会读取数据库中的相同记录。如果不进行全面改造并深入了解队列应该如何工作,我只想要一个延迟,以便我可以读取和处理一堆记录,然后读取下一批记录等等。我想我只需要启动五个进程来非常快速地读取和更新我的数据库,但我没有完全考虑清楚!也许我应该放弃Task/async/await,而只是同步地执行。谢谢。 - ScottG
2
@ScottG我认为您应该提出一个新问题,讲述您实际想要做什么。这是XY问题。 - usr
2个回答

6
 for (var i = 0; i < 5; i++)
 {  
      tasks.Add(ProcessQueueAsync());
      await Task.Delay(5000);
 }

或者:

 for (var i = 0; i < 5; i++)
 {  
      await ProcessQueueAsync();
      await Task.Delay(5000);
 }

取决于您的需求。

0
如果您希望任务一个接一个地运行,并且之间有5秒的延迟,那么您应该考虑使用Task.ContinueWith而不是使用Task.WhenAll。这将允许您串行运行任务,而不是并行运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接