Ios 如何知道所有并发操作都已完成
我的情况是:Ios 如何知道所有并发操作都已完成,ios,objective-c,nsoperationqueue,nsoperation,nsblockoperation,Ios,Objective C,Nsoperationqueue,Nsoperation,Nsblockoperation,我的情况是: 我有用户 每个用户都有一些可以通过用户对象获取的历史数据 我想做的是: 最多2个用户必须同时获取其历史数据(这就是我希望使用NSOperationQueue的原因) 当任何用户完成获取其历史数据时,我需要得到通知 我需要在每个用户完成获取历史数据时得到通知 我的问题是: 既然我不能用下面的代码完成,我怎么能实现我想要做的事情呢 感谢您的帮助 NSOperationQueue *operationQueue = [[NSOperationQueue alloc]
- 我有用户
- 每个用户都有一些可以通过用户对象获取的历史数据
- 最多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];
}
这个问题与此不同,因为我不想链接任何请求。我只想知道他们什么时候都完成了
这只有一个操作队列的完成块
这提供了一种使操作块等待对loadHistoryData
的异步调用完成的方法。当写入时setsuspend
我找不到满足我需要的答案。有吗 使用KVO观察队列的操作属性,然后通过检查[queue.operations count]==0,可以判断队列是否已完成 在执行KVO的文件中的某个地方,声明KVO的上下文,如下所示:我使用了 将它们结合起来对我来说是这样的:
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"];
}];
}];
}
我已经编辑了我的问题。我不认为这个问题是重复的,但问题是这个方法不等待异步操作在块操作中完成@下一个人