美文网首页
http请求取消掉,保证同一时间只有一个http请求在执行

http请求取消掉,保证同一时间只有一个http请求在执行

作者: Lee馍馍 | 来源:发表于2019-03-27 22:17 被阅读0次
    在进行新的网络请求的时候,把之前的http请求取消掉,
    保证同一时间只有一个http请求在执行
    
    AFNetWorking为例
    大致思路:声明一个全局的 AFHTTPSessionManager *manager;
    再声明一个全局的可变数组用于存放 http请求。
    
    进行http请求的时候,一定要创建一个新的 NSURLSessionDataTask 
    任务
    再[task cancel]之后,并不是说这个http请求就完全没有任何音讯了
    task会立刻回掉 error,NSLog(@"error:%@",error.description)
    可以打印log消息看到Code=-999 “已取消”
    
    @property (nonatomic,strong)    AFHTTPSessionManager    *manager;
    @property (nonatomic,strong)    NSMutableArray          *taskArray;
     
    #pragma mark -- taskArr
    -(NSMutableArray *)taskArray{
        if (!_taskArray) {
            _taskArray = [NSMutableArray arrayWithCapacity:3];
        }
        return _taskArray;
    }
     
    - (void)viewDidLoad {
        [super viewDidLoad];
        //初始化  AFHTTPSessionManager 并且设置配置信息,在这不做多述
        self.manager = [AFHTTPSessionManager manager];
        self.manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    }
     
     
    -(void)loadDataWithSearchStr:(NSString *)searchStr{
        //首先遍历存放task的数组,并且取消之前的http请求
        [self.taskArray enumerateObjectsUsingBlock:
    ^(NSURLSessionDataTask *task, NSUInteger idx, BOOL * _Nonnull stop) {
            NSLog(@"这个任务取消之前的状态是:::::%ld",task.state);
            [task cancel];//取消http请求
            NSLog(@"这个任务取消之后的状态是:::::%ld",task.state);
        }];
        //移除self.taskArray中所有的任务
        [self.taskArray removeAllObjects];
        //创建一个新的NSURLSessionDataTask,记住,一定是新创建一个任务
        NSURLSessionDataTask *newTask = [self.manager GET:@"你的接口url"
     parameters:nil progress:nil success:
    ^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
            //在这里处理数据
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
        }];
        //把最新的任务存进self.taskArray,用于下次遍历
        [self.taskArray addObject:newTask];
    }
    

    相关文章

      网友评论

          本文标题:http请求取消掉,保证同一时间只有一个http请求在执行

          本文链接:https://www.haomeiwen.com/subject/ztjxbqtx.html