我的情况是:
- 我有用户
- 每个用户都有一些可以通过用户对象获取的历史数据
我想做的是:
- 最多 2 个用户必须同时获取他们的历史数据(这就是我想使用 NSOperationQueue 的原因)
- 我需要在任何用户完成获取其历史数据时得到通知
- 我需要在每个用户完成获取他们的历史数据时得到通知
我要问的是:
- 我无法通过下面的代码实现我想做的事情?
感谢任何帮助。
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
[operationQueue setMaxConcurrentOperationCount:2];
for (User *user in users) {
NSBlockOperation *operationObject = [NSBlockOperation blockOperationWithBlock:^{
[user loadHistoryData:^{
[NSNotificationCenter postNotificationToMainThread:@"oneUserFetchedHistory"];
}];
}];
[operationQueue addOperation:operationObject];
}
这个问题不同于这个question因为我不想链接任何请求。我只想知道它们什么时候全部执行完。
这answer只有一个操作队列的完成 block 。
这answer提供了一种使操作 block 等待直到对 loadHistoryData
的异步调用完成的方法。如写 setSuspended
我找不到满足我需要的答案。有没有?
最佳答案
我用过 AsyncBlockOperation和 NSOperationQueue+CompletionBlock
将它们结合起来对我来说是这样的:
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue setMaxConcurrentOperationCount:1];
// 1 is serial, more is concurrent
queue.completionBlock = ^{
[NSNotificationCenter postNotificationToMainThread:@"allUsersFetchedHistory"];
};
for (User *user in users){
[queue addOperationWithAsyncBlock:^(AsyncBlockOperation *op) {
[user loadHistoryData:^{
[op complete];
[NSNotificationCenter postNotificationToMainThread:@"oneUserFetchedHistory"];
}];
}];
}
关于ios - 如何知道所有并发的 NSOperations 都完成了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47256724/