NSOperationsQueue:管理相同的请求
NSOperationsQueue: Managing identical requests
在以下情况下我需要打同一个endpoint
:
- 当视图重新出现在屏幕上时
viewWillAppear
。
- 在视图控制器的生命周期中每 5 秒一次(在呈现视图时)。
- 应用后 returns 从
background
到 foreground
。
当我的应用 returns 到 foreground
时,这至少会创建 2 个(如果不是 3 个)concurrent
对相同 endpoint
的请求,尤其是在网速较慢的情况下.
我知道我可以将 Queue
中的 concurrent
请求数限制为 1,但有时我确实需要打几个不同的 endpoints
concurrently
所以我希望找到一个替代方案。
我正在使用 NSURLSession
和 NSOperationsQueue
进行这些调用。是否有使用 NSOperationsQueue
处理此问题的最佳做法?
可以将属于同一任务的 NSOperation
个子类合并(组合)在一起,从而消除任何冗余的网络调用。为了做到这一点,每个操作都需要有一个 identifier
,它对任务(不是操作本身)是唯一的,并且可以用来确定该操作是否在队列中。一旦确定一个操作在队列中,我们就可以获取新操作的 block/closure 回调并将其插入到旧操作结构中,以确保当旧操作的任务完成时,两个回调都会被触发。这有助于避免您的应用程序中缺少回调的情况。
我写了一篇涵盖这个确切主题的文章:
http://williamboles.me/removing-bolierplate-when-coalescing-nsoperations/
请注意,这仅适用于仍在队列中的操作,如果您想根据时间间隔限制操作,则需要延长 "traffic controller",例如 "Code Different"评论了。
在以下情况下我需要打同一个endpoint
:
- 当视图重新出现在屏幕上时
viewWillAppear
。 - 在视图控制器的生命周期中每 5 秒一次(在呈现视图时)。
- 应用后 returns 从
background
到foreground
。
当我的应用 returns 到 foreground
时,这至少会创建 2 个(如果不是 3 个)concurrent
对相同 endpoint
的请求,尤其是在网速较慢的情况下.
我知道我可以将 Queue
中的 concurrent
请求数限制为 1,但有时我确实需要打几个不同的 endpoints
concurrently
所以我希望找到一个替代方案。
我正在使用 NSURLSession
和 NSOperationsQueue
进行这些调用。是否有使用 NSOperationsQueue
处理此问题的最佳做法?
可以将属于同一任务的 NSOperation
个子类合并(组合)在一起,从而消除任何冗余的网络调用。为了做到这一点,每个操作都需要有一个 identifier
,它对任务(不是操作本身)是唯一的,并且可以用来确定该操作是否在队列中。一旦确定一个操作在队列中,我们就可以获取新操作的 block/closure 回调并将其插入到旧操作结构中,以确保当旧操作的任务完成时,两个回调都会被触发。这有助于避免您的应用程序中缺少回调的情况。
我写了一篇涵盖这个确切主题的文章:
http://williamboles.me/removing-bolierplate-when-coalescing-nsoperations/
请注意,这仅适用于仍在队列中的操作,如果您想根据时间间隔限制操作,则需要延长 "traffic controller",例如 "Code Different"评论了。