iOS 如何解决并发请求时,只接受最后一个请求返回的结果

大致意思是 虽然NSOperation 的cancel 并不能取消请求,但是可以对这个NSOperation进行标记。

当cancel 属性是YES时,表明 NSOperation虽然已经执行,并返回了结果,但是我现在不需要了。那么我们每次执行request的时候都把上一个operation cancel掉,然后在completion  Block中判断operation是否cancel,如果cancel那么不返回response的值。

 1 + (AFHTTPRequestOperation *)requestSellerWithCompletion:(requestFinishedCompletionBlock)successBlock
 2 {
 3     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
 4
 5     AFHTTPRequestOperation * operation = [manager GET:kRequestSellerURL parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
 6
 7         if (operation.isCancelled) {
 8          //若果operation已经被cancel了,则不对返回数据进行处理
 9             NSLog(@"operation is Canceled");
10         }else{
11      //如果没有cancel 掉,则进行正常的数据解析
12             NSArray *sellerArray = [MTLJSONAdapter modelsOfClass:[Seller class] fromJSONArray:responseObject[@"data"] error:nil];
13             if (successBlock) {
14               //  NSLog(@"current operation count is %d",[manager.operationQueue operations].count);
15                 successBlock(sellerArray);
16             }
17         }
18
19
20     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
21
22     }];
然后在for循环里这么做.

for (int i = 1; i <= 10; i++) {

        if (operation) {
            [operation cancel];
        }
      operation = [Seller requestSellerWithCompletion:^(id object) {
            NSLog(@"finished download %d",i);

        }];

    }

运行一下看看console .

看到叶孤城的一篇文章,现在自己总结如上

时间: 2024-08-02 11:00:35

iOS 如何解决并发请求时,只接受最后一个请求返回的结果的相关文章

在服务器上处理请求时出现未知错误。服务器返回的状态码为500

操作方法: 为页面的ScriptManager控件添加EnablePartialRendering="false"的属性  此方法不是直接解决或规避问题的,是为了将详细的页面错误显示出来,以便找到需要修正 的地方,个人觉得这才是正道嘛,不能躲避错误,而应尽量不让错误发生. ---> 找出错误  -- > 修改. <asp:ScriptManager ID="ScriptManager" runat="server" Enable

JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器

有这样一个压力测试环境,有一个上传页面,上传成功之后服务器会返回一些上传信息(比如文件的 id 或者保存路径之类的信息),然后压力机会继续下一个请求,比如调整 id 为 xx 的文件的一些信息等等.问题来了:JMeter 是不知道上传后文件的 id 的,第二个请求势必从第一个请求的返回结果中提取出文件 id,然后依此为参数发起第二次请求.那么 JMeter 如何把上一个请求的结果作为下一个请求的参数呢?本文将介绍如何使用正则提取器解决这个问题.        1. 提参采样器添加正则表达式提取器

如何使用multipart/form-data格式上传文件(POST请求时,数据是放在请求体内,而不是请求头内,在html协议中,用 “\r\n” 换行,而不是 “\n”)

在网络编程过程中需要向服务器上传文件.Multipart/form-data是上传文件的一种方式. Multipart/form-data其实就是浏览器用表单上传文件的方式.最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-data格式上传到服务器. 表单形式上传附件 具体的步骤是怎样的呢? 首先,客户端和服务器建立连接(TCP协议). 第二,客户端可以向服务器端发送数据.因为上传文件实质上也是向服务器端发送请求. 第三,客户端按照符合“m

Jmeter之Json Path Extractor 接受上一个请求的响应参数

最近在使用Jmeter进行接口测试,被一个问题困扰了很久,就是第二个请求如何接收上一个请求响应中的参数,刚开始尝试着用网上普遍说的正则表达式,长了了N多次之,都没有达到我想要的效果,被整的够惨,于是,开始尝试使用第二种方法,就是Jmeter之Json Path Extractor,感觉棒极了,在此记录下 1.下载安装 Json Path Extractor插件,然后解压到jmeter安装目录相应的文件夹下(这里不细讲了) 2.添加请求A,输入响应的服务器.端口号.路径等(路径要记得输对哦),在A

jmeter-逻辑控制器之 交替控制器(实现2个请求每次只执行其中一个)

交替控制器: 案例:两个请求每次只能执行其中一个,可使用交替控制器. 1.线程组->添加->逻辑控制器->交替控制器 2.在控制下添加两个http请求.运行的时候第一次循环执行第一个,第二次循环执行第二个,第三次执行第一个...

正则表达式提取器--jmeter将上一个请求的结果作为下一个请求的入参

接口测试时需要将不同的接口串联起来,如将登录接口的出参UserStatusToken作为获取客户列表这个接口的入参,这样才能识别你是否是合法的用户. 1.创建一个线程组 选中测试计划-->右键-->添加-->Threads(Users)-->线程组 2.创建一个获取凭证的请求 在刚刚创建的线程组上右键-->添加-->Sampler-->HTTP请求 3.创建后置处理器 选中刚才添加的HTTP请求-->右键-->添加-->后置处理器-->正则

C#多个Windows Service 传递给ServiceBase时,只运行其中一个的解决办法

在之前编写的一个服务里,ServiceBase[]里只有一个, static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> static void Main() { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new Service1(), }; ServiceBase.Run(ServicesToRun); } } 运行是

解决ArcMap启动时只停留在初始化界面的方法

来自:https://www.cnblogs.com/luwl/p/6899342.html 方法1 修改环境变量TEMP和TMP为C:\Temp 重启ArcMap. 方法2 关闭系统进程Print Spooler. 打开C:\WINDOWS\system32\spool\PRINTERS,删除里面的所有文件. 启动系统进程Print Spooler. 重启ArcMap. 方法3 修改安装路径C:\Program Files (x86)\Common Files\ArcGIS\Desktop10

PPT内嵌视频(指发布时只需要ppt一个文件即可)

做实验时用手机拍了视频,想把视频嵌入到PPT中.只是单纯的嵌入很容易,但是我想将PPT推送给其他人时,不需要再传视频文件.搜了一下做法,可以通过flash视频格式实现.电脑为thinkpad笔记本,win7-64,安装了office2013.操作步骤如下: 1.用format factory将.mp4文件转换为.swf文件. 2.打开ppt,设置如下:文件->选项 3. 在工具栏中,做如下选择 4.此时鼠标变为十字形,在PPT上画出一个区域,然后右键,选择属性,做如下配置即可 5.PPT放映时,