C# 定时任务模拟,请求二十万数据
定时器请求二十万数据
最近遇到一个问题,api接口,因为数据内容转换处理。一页1万条数据处理速度3秒以上。假设二十万条数据,分页请求二十次,总共花费时间1分钟以上。
解决这个问题,我第一时间想到并发,但是因为并发压力的问题,这个方案被否定。
后面,我想到一个解决思路,就是通过定时任务来发送请求,来解决这个问题。
假设我定时每1秒钟去发送一次请求,总共花费时间半分钟以内完成任务,上模拟代码
static void Main(string[] args)
{
List<Task> tasks = new List<Task>();
bool b = true;
var stop = Stopwatch.StartNew();
while (b)
{
if (!b) break;
var taskDelay = Task.Delay(1000);
var task = RequestTask();
//延迟1秒,在请求下一次任务
var any = Task.WhenAny(taskDelay, task);
tasks.Add(task);
any.Wait();
//如果任务提前完成
if (any.Result== task)
{
if (i >= max)
{
b = false;
}
}
else
{
//通过延续任务,处理响应结果
any.ContinueWith(t =>
{
task.Wait();
//通过响应结果,来判断是否结束定时任务
if (i >= max)
{
b = false;
}
});
}
}
//等待还未结束的任务
var taskWhen= Task.WhenAll(tasks);
taskWhen.Wait();
stop.Stop();
Console.WriteLine($"结束 {tasks.Count} {stop.ElapsedMilliseconds}");
Console.ReadLine();
}
static int i = 0;
static int max = 10;
public static Task RequestTask()
{
return Task.Run(() =>
{
i++;
var index = i;
Console.WriteLine($"任务{index} 开始");
Random random = new Random();
//模拟请求所等待的时间
int num = 500;
if (i<max)
{
num = random.Next(3000, 3500);
}
Thread.Sleep(num);
Console.WriteLine($"任务{index} 请求时间:{num}");
});
}
C# 定时任务模拟,请求二十万数据的更多相关文章
- Fiddler之模拟响应、修改请求或响应数据(断点)
在测试过程中,有时候需要修改请求或响应数据,或者直接模拟服务器响应,此时可以使用fiddler进行此类操作.可以使用断点功能完成. 一.修改请求数据 在发起请求后,需要修改请求的数据时,可以设置请求前 ...
- 二、jmeter模拟请求头及监听器之结果树
一.模拟请求头 利用jmeter发送http请求时,被接收的服务端会对发送的该请求进行初步判断,如果不是web端发送的请求就会被打回导致请求不通,这时候需要模拟请求头,模拟正常的用户行为进行发送请求 ...
- ASP模拟POST请求异步提交数据的方法
这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限 ...
- c# JD快速搜索工具,2015分析JD搜索报文,模拟请求搜索数据,快速定位宝贝排行位置。
分析JD搜索报文 搜索关键字 女装 第二页,分2次加载. rt=1&stop=1&click=&psort=&page=3http://search.jd.com/Se ...
- 用JSON-server模拟REST API(二) 动态数据
用JSON-server模拟REST API(二) 动态数据 上一篇演示了如何安装并运行 json server , 在这里将使用第三方库让模拟的数据更加丰满和实用. 目录: 使用动态数据 为什么选择 ...
- iOS项目之模拟请求数据
如何在iOS开发中更好的做假数据? 当工期比较紧的时候,项目开发中会经常出现移动端等待后端接口数据的情形,不但耽误项目进度,更让人有种无奈的绝望.所以在开发中,我们常常自己做些假数据,以方便开发和UI ...
- 二、Ajax请求MVC中数据查询表返回datatable
一.Ajax请求MVC中数据查询表返回datatable 解决方式 返回list
- 从session实现机制分析模拟请求验证码的可行性(转)
悲剧了,发现写完这篇blog没有配上这个格调超高的标题. 1.0问题背景 现在要实现一个带验证码网站的的自动登陆功能.验证码识别过程不再这篇文章的讨论之中.(之后有篇文章我会详细的总结验证码的识别 ...
- C#模拟请求,模拟登录,Cookie设置、文件上传等问题汇总
由于业务需求,最近需要模拟完成登陆某个网站,并上传所需要的文件.在开发途中,遇到了很多问题,现在,就我遇到的一些问题及解决办法说明如下,希望对遇到同样问题的人有所帮助.因为技术有限,可能有些内容并不完 ...
- HTTP通信模拟表单提交数据
前面记录过一篇关于http通信,发送数据的文章:http://www.cnblogs.com/hyyq/p/7089040.html,今天要记录的是如何通过http模拟表单提交数据. 一.通过GET请 ...
随机推荐
- Linux的stat命令结果说明
There are 3 kind of "timestamps": Access - the last time the file was read Modify - the la ...
- TP5--路由
路由定义采用\think\Route类,通常是在应用的路由配置文件application/route.php进行注册 use think\Route; //路由规则 // Route::rule('/ ...
- nop4.3 用户权限管理
权限管理涉及到5张表: //用户表 select * from Customer //角色表select * from CustomerRole //用户和角色对应关系select * from Cu ...
- vue-awesome-swiper使用中的一些问题
项目中使用了vue-awesome-swiper,发现autoplay不能用.网上找了半天,说是版本问题.最后在main.js中添加以下代码解决. import VueAwesomeSwiper fr ...
- base64 转图片
data:image+jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg% ...
- angularjs 1.4.x 内部组件介绍
内部Services 1, $cacheFactory angular 内部缓存类,构建一个缓存对象. var cache = $cacheFactory('cacheId'); expect($ca ...
- SATA硬盘的数据和电源接口定义(转)
现在 SATA设备越来越普及,包括STAT硬盘和光驱基本都已经是 SATA接口的了,以前的老式电源输出接口一般都是20针供主板加上4针的电源供硬盘也就是说以前的电脑电源给硬盘供电没有设计15针 SAT ...
- nginx文件上传模块 nginx_upload_module
1.编译安装nginx wget https://github.com/fdintino/nginx-upload-module/archive/refs/heads/master.zip PS:原先 ...
- vulnhub:Its_October靶机
kali:192.168.111.111 靶机:192.168.111.175 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --script=http-enum 192.168. ...
- 语言-页面-模板-thymeleaf
一.语法 二.使用 Thymeleaf入门到吃灰 - 鞋破露脚尖儿 - 博客园 (cnblogs.com)