多并发条件依赖执行 (仅供自己参考)

前端之家收集整理的这篇文章主要介绍了多并发条件依赖执行 (仅供自己参考)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. + (void)searchMutableRequest:(NSArray *)urlArray Page:(int)page FMSSigItem:(FMSSigItem *)item CallBack:(FMSearchCallback)callback{
  2. if (urlArray.count > 0) {
  3. __block NSInteger requestCount = 0;
  4. __block NSMutableArray *mutableResult = [NSMutableArray arrayWithCapacity:urlArray.count];
  5. for (int i = 0; i < urlArray.count; i++) {
  6. [mutableResult addObject:[NSNull null]];
  7. }
  8.  
  9. //
  10. // dispatch_group_notify(<#dispatch_group_t group#>,<#dispatch_queue_t queue#>,<#^(void)block#>)
  11. //
  12. // dispatch_group_async(<#dispatch_group_t group#>,<#^(void)block#>)
  13. /**
  14. NSOperation *end = [NSBlockOperation blockOperationWithBlock:^{
  15. }];
  16. NSOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
  17. }];
  18. NSOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
  19. }];
  20. [end addDependency:op1];
  21. [end addDependency:op2];
  22. NSArray *ar =@[end,op1,op2];
  23. [[NSOperationQueue mainQueue] addOperations:ar waitUntilFinished:YES];
  24. */
  25. NSOperationQueue *myQueue = [[NSOperationQueue alloc] init];
  26. myQueue.maxConcurrentOperationCount = urlArray.count;
  27. [urlArray enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop) {
  28. NSDictionary *dic = obj;
  29. NSString *urlStr = [dic objectForKey:@"url"];
  30. NSURL *url = [NSURL URLWithString:urlStr];
  31. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
  32. [FetchMusicSourceAPI setSearchMutableRequest:request Dic:dic];
  33. [NSURLConnection sendAsynchronousRequest:request queue:myQueue completionHandler:^(NSURLResponse *response,NSData *data,NSError *connectionError) {
  34. if (connectionError) {
  35. [FMSShowError showNetError:connectionError];
  36. return ;
  37. }
  38. else{
  39. if (data) {
  40. NSString *resultStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  41. if(resultStr){
  42. NSLog(@"=====%d",idx);
  43. [mutableResult replaceObjectAtIndex:idx withObject:resultStr];
  44. NSLog(@"fffff");
  45. }
  46. }
  47. }
  48. requestCount++;
  49. }];
  50. }];
  51.  
  52. while (requestCount < urlArray.count) {
  53. [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
  54. }
  55. FMSSigItem *parseItem = [FMSSigItem itemWithsourceID:item.sourceID Method:item.method Params:item.params Mode:@"parse" Data:mutableResult];
  56. [FetchMusicSourceAPI searchParseWithFMSSigItem:parseItem Page:page CallBack:callback];
  57. }
  58. }

猜你在找的设计模式相关文章