我需要使用Swift在API上执行同步请求。请求必须排队。意思是,如果一个已经在进行中并且正在等待响应,则它不能被进入队列或已经在队列中的下一个同步请求取消或中断。
必须按顺序执行请求,使其进入队列(FIFO)。下一个请求必须等到队列中的上一个操作完成/完成后才能开始。
此外,必须执行队列中的每个单个请求,直到队列为空。同步请求可以随时进入队列。
我打算将Synchronous API Client实现为一个单例,其中包含自己的队列请求队列。请求不得停止/冻结UI。用户界面必须始终对用户交互做出响应。
我知道可以使用信号量来完成,但是,除非您知道自己在做什么,并且您完全确定信号量是如何工作的,否则这不是最安全的方法,也不是最好的方法。否则,可能会出现潜在的错误和崩溃。
我希望每个进入队列的同步请求都能够成功执行(按FIFO顺序,无论返回的是成功还是错误作为响应),并且UI会在之后立即更新。
所以,我的问题是解决这个问题的最佳方法是什么? 感谢您的帮助和时间。
答案 0 :(得分:0)
您可以创建自己的DispatchQueue并将其作为DispatchWorkItems进行操作。默认情况下为串行。如果您打算更新UI,只需记住在DispatchQueue.main上调用完成操作即可。
John Sundell在这里有一篇有关DispatchQueues的精彩文章:
https://www.swiftbysundell.com/articles/a-deep-dive-into-grand-central-dispatch-in-swift/