我不确定标题是否合适,但我会尽力解释我的意思。
所以我有这样的代码:
func syncData(forUser user: User, endPoints: [EndPoint]) {
serialQueue.async{
for endPoint in endPoints {
// download the data in the internet using the provided endPoint (API). This may take longer to finish depends on the connection speed and data begin downlod
}
}
}
此方法“连续”执行多项任务。每个用户的任务应该“连续”完成,因为它们相互依赖,这种方法可以正常工作,从互联网上下载数据。
问题在于下载数据需要时间。假设user1执行数据下载并且该过程需要时间来完成,而user1的任务正在处理user2也执行数据下载。由于user1尚未完成,因此user2必须等待,直到user1完成所有操作。因此,user2的进度条保持为0,直到完成所有user1。
有没有办法对user1和user2的所有任务进行分组(单独),仍然可以串行完成。每个小组应该同时进行, 所以每个小组在执行任务之前不会等待另一个小组完成。
答案 0 :(得分:1)
根据每个用户的唯一ID为每个用户创建一个单独的队列。然后在此函数中,在分配给该特定用户的队列上运行您的代码。
或强>
您可以维护所有队列的数组。当用户请求操作时,查看他们是否已在阵列中为其分配了队列。如果是,则将任务放入该队列中。如果没有,则创建一个新队列,将其分配给该用户并将任务放在其上。