Swift 队列中的同步 API 请求?

Synchronous API requests with Queue in Swift?

我需要使用 Swift 在 API 上执行同步请求。请求必须排队。意思是,如果一个已经在进行中并且它正在等待响应,则它不能被下一个进入队列或已经在队列中的同步请求取消或中断。

请求在进入队列时必须按顺序执行(先进先出)。在队列.

中的前一个请求为finished/completed 之前,下一个请求不得开始

此外,队列中的每个请求都必须执行,直到队列为空。同步请求可以随时入队

我打算将同步 API 客户端实现为一个单例,它包含自己的排队请求队列。请求不得 stop/freeze UI。 UI 必须始终响应用户交互。

我知道这可以用信号量来完成,但是,除非你知道你在做什么并且你完全确定信号量是如何工作的,否则这不是最安全或最好的方法。否则,可能会出现潜在的错误和崩溃。

我希望每个进入队列的同步请求都能成功执行(按 FIFO 顺序,无论它是 returns 成功还是错误作为响应)并且 UI 之后立即更新。

所以,我的问题是处理和解决这个问题的最佳方法是什么? 感谢您的帮助和时间。

您可以创建自己的 DispatchQueue 并将您的操作作为 DispatchWorkItems 对其进行操作。默认情况下是串行的。如果您打算更新 UI,请记住在 DispatchQueue.main 上完成您的任务。

John Sundell 在这里发表了一篇关于 DispatchQueues 的精彩文章:

https://www.swiftbysundell.com/articles/a-deep-dive-into-grand-central-dispatch-in-swift/