我的情况是:
我想做的是:
我要问的是:
感谢任何帮助。
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只有一个操作队列的完成块。
此answer提供了一种方法,使操作块等待,直到完成对loadHistoryData
的异步调用。写作setSuspended
我无法找到满足我需求的答案。有没有?
答案 0 :(得分:1)
使用KVO观察队列的操作属性,然后通过检查[queue.operations count] == 0来判断队列是否已完成。
文件中的某处执行KVO,为此类(more info)声明KVO的上下文:
答案 1 :(得分:0)
我已使用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"];
}];
}];
}