前端之家收集整理的这篇文章主要介绍了
多并发条件依赖执行 (仅供自己参考),
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
+ (void)searchMutableRequest:(NSArray *)urlArray Page:(int)page FMSSigItem:(FMSSigItem *)item CallBack:(FMSearchCallback)callback{
if (urlArray.count > 0) {
__block NSInteger requestCount = 0;
__block NSMutableArray *mutableResult = [NSMutableArray arrayWithCapacity:urlArray.count];
for (int i = 0; i < urlArray.count; i++) {
[mutableResult addObject:[NSNull null]];
}
//
// dispatch_group_notify(<#dispatch_group_t group#>,<#dispatch_queue_t queue#>,<#^(void)block#>)
//
// dispatch_group_async(<#dispatch_group_t group#>,<#^(void)block#>)
/**
NSOperation *end = [NSBlockOperation blockOperationWithBlock:^{
}];
NSOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
}];
NSOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
}];
[end addDependency:op1];
[end addDependency:op2];
NSArray *ar =@[end,op1,op2];
[[NSOperationQueue mainQueue] addOperations:ar waitUntilFinished:YES];
*/
NSOperationQueue *myQueue = [[NSOperationQueue alloc] init];
myQueue.maxConcurrentOperationCount = urlArray.count;
[urlArray enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop) {
NSDictionary *dic = obj;
NSString *urlStr = [dic objectForKey:@"url"];
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[FetchMusicSourceAPI setSearchMutableRequest:request Dic:dic];
[NSURLConnection sendAsynchronousRequest:request queue:myQueue completionHandler:^(NSURLResponse *response,NSData *data,NSError *connectionError) {
if (connectionError) {
[FMSShowError showNetError:connectionError];
return ;
}
else{
if (data) {
NSString *resultStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if(resultStr){
NSLog(@"=====%d",idx);
[mutableResult replaceObjectAtIndex:idx withObject:resultStr];
NSLog(@"fffff");
}
}
}
requestCount++;
}];
}];
while (requestCount < urlArray.count) {
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
FMSSigItem *parseItem = [FMSSigItem itemWithsourceID:item.sourceID Method:item.method Params:item.params Mode:@"parse" Data:mutableResult];
[FetchMusicSourceAPI searchParseWithFMSSigItem:parseItem Page:page CallBack:callback];
}
}