美文网首页
token 异步

token 异步

作者: 动感超人丶 | 来源:发表于2018-12-03 21:19 被阅读3次

子线程同时发起多个异步操作,需要得到上一个操作的回调,再执行下一个操作。
所有操作暂时全部放入数组,通过对数组操作,使队列每次只放一个操作任务,依次执行完毕。直到数组为空,所有操作都完成。这么做,可解决token短时间过期,经常更换,app同时发起多个请求被强制下线的问题。

//
//  ViewController.m
//  lockDemo
//
//  Created by huant on 2018/12/3.
//  Copyright © 2018年 huant. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) NSMutableArray * opens;

@property (nonatomic, strong) NSOperationQueue * queue;

@end

@implementation ViewController

static int a = 1000;

- (void)viewDidLoad {
    [super viewDidLoad];

    self.opens = [[NSMutableArray alloc] init];
   
    NSBlockOperation * block = [NSBlockOperation blockOperationWithBlock:^{
        
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            NSLog(@"================");
            [self removeOp];
        });
        for (int i = 0; i<100; i++) {
            [self print:@"111"];
            
        }
        
        
    }];
    
    NSBlockOperation * block1 = [NSBlockOperation blockOperationWithBlock:^{
        for (int i = 0; i<100; i++) {
            [self print:@"222222222"];
            
        }
        [self removeOp];

    }];
    
    NSBlockOperation * block2 = [NSBlockOperation blockOperationWithBlock:^{
        for (int i = 0; i<100; i++) {
            [self print:@"33333333333333"];
            
        }
        [self removeOp];

    }];

    [self.opens addObject:block];
    [self.opens addObject:block1];
    [self.opens addObject:block2];
    
    [self.queue addOperation:self.opens.firstObject];

}

- (void)removeOp{
    if (_opens.count) {
        [self.opens removeObjectAtIndex:0];

    }
    if (self.opens.count) {
        [self.queue addOperation:self.opens.firstObject];

    }
   
}

- (NSOperationQueue *)queue{
    if (!_queue) {
        _queue = [NSOperationQueue new];
    }
    return _queue;
}

- (void)print:(NSString *)str{
    @synchronized (self) {
        NSLog(@"%@", str);
//        NSLog(@"%@", [NSThread currentThread]);
        --a;
        NSLog(@"%d", a);
    }
}

@end

相关文章

  • token 异步

    子线程同时发起多个异步操作,需要得到上一个操作的回调,再执行下一个操作。所有操作暂时全部放入数组,通过对数组操作,...

  • laravel 重点笔记(一)

    csrf_token()用于异步提交,csrf_field()用于表单提交!

  • okhttp使用Interceptor接口实现Token刷新机制

    多线程网络请求中,Token刷新的核心思路是同步刷新Token,异步重新请求。 思路很简单,但是要保证稳定性和性能...

  • 解决ThinkPHP 5.1表单令牌Token失效问题

    ThinkPHP出于安全的考虑增加了表单令牌Token,由于通过Ajax异步更新数据仅仅部分页面刷新数据,就导致了...

  • 小程序page监听App.js登陆方法

    在page页面中需要token,但是登陆往往都放在app.js中,两者又是异步,常常导致bug。 所以应该在pag...

  • 2018-06-25

    (原生)微信小程序开发过程中,微信小程序是异步执行的,用户登录同时,还没拿到令牌token就无法刷新数据 我这...

  • 小程序-解决同时多个异步请求引起的重复刷新token

    不可避免的,我们需要在同一个页面同时执行多个异步的网络请求,为了避免token短时间内多次重复刷新,我们采取订阅的...

  • Java-token

    token基础 生成token 解析token 问题 : 在退出登录 / 修改密码时怎样实现JWT Token失效...

  • keystone token和zoning

    keystone四种token keystone的四种token为:UUID token、PKI token、PK...

  • NodeJS中使用token

    JWT(Json Web Token) 1. Token 什么是Token?Token指访问资源的凭据,是一种身份...

网友评论

      本文标题:token 异步

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