通过Task异步加快对数组的运算
一.介绍
Task是.NetFramework3.0出现的,线程是基于线程池,然后提供了丰富的API. 先用AverageAssign方法把一组数据平均分成n组,再通过遍历n组数据,循环开Task多线程。
二.平均分组方法
/// <summary>
/// 将一组数据平均分成n组
/// </summary>
/// <param name="source">要分组的数据源</param>
/// <param name="n">平均分成n组</param>
/// <returns><T></returns>
public static List<List<T>> AverageAssign(List<T> source, int n)
{
List<List<T>> result = new List<List<T>>();
int remainder = source.Count() % n; //(先计算出余数)
int number = source.Count() / n; //然后是商
int offset = ;//偏移量
for (int i = ; i < n; i++)
{
List<T> value = null;
if (remainder > )
{
value = source.Take((i + ) * number + offset + ).Skip(i * number + offset).ToList();
remainder--;
offset++;
}
else
{
value = source.Take((i + ) * number + offset).Skip(i * number + offset).ToList();
}
result.Add(value);
}
return result;
}
三.Task
string message = string.Empty;
var listGroup = Test<ModelDemo>.AverageAssign(list,);
//信号量
var tokenSource = new CancellationTokenSource();
//先添加进Task数组,然后一起启动异步
//TaskFactory taskFactory = new TaskFactory();
//List<Task> taskList = new List<Task>();
//taskList.Add(taskFactory.StartNew(() =>
//{}
// Task.WaitAll(taskList.ToArray());
try
{ foreach (var group in listGroup)
{
Task.Factory.StartNew(() =>
{
if (tokenSource.Token.IsCancellationRequested)
{
Console.WriteLine("日志");
return;
} //要执行的方法
Print(group); }, tokenSource.Token); } }
catch (AggregateException aex)
{
tokenSource.Cancel();
foreach (var item in aex.InnerExceptions)
{
message += item.Message;
}
Console.WriteLine(message);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
static void Print(List<ModelDemo> model)
{
foreach (var item in model)
{
Console.WriteLine(item.Id);
}
}
四.源码
https://github.com/gyw1309631798/MyTask
通过Task异步加快对数组的运算的更多相关文章
- C# 使用SIMD向量类型加速浮点数组求和运算(1):使用Vector4、Vector<T>
作者: 目录 一.缘由 二.使用向量类型 2.1 基本算法 2.2 使用大小固定的向量(如 Vector4) 2.2.1 介绍 2.2.2 用Vector4编写浮点数组求和函数 2.3 使用大小与硬件 ...
- Task异步编程
Task异步编程中,可以实现在等待耗时任务的同时,执行不依赖于该耗时任务结果的其他同步任务,提高效率. 1.Task异步编程方法签名及返回值: a) 签名有async 修饰符 b) 方法名以 Asyn ...
- 『审慎』.Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历
异步Task简单介绍 本标题有点 哗众取宠,各位都别介意(不排除个人技术能力问题) —— 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 —— 异步编 ...
- Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历
Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历 https://www.cnblogs.com/shuxiaolong/p/DotNet_Task_BUG.html 异步Task简单 ...
- 5_PHP数组_3_数组处理函数及其应用_9_数组集合运算函数
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 数组集合运算函数 1. array_merge() 函数 程序: <?php $array1 = array ...
- numpy数组的运算
numpy数组的运算 数组的乘法 >>> import numpy as np >>> arr=np.array([[1,2,3],[4,5,6]]) >&g ...
- C# 将 Begin 和 End 异步方法转 task 异步
在 .NET Framework 有两个不同的异步方法,一个是 Asynchronous Programming Model (APM) 另一个是 Task-based asynchronous pa ...
- c#中的Task异步编程
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/index翻译 1. 引入 Task异步 ...
- C++走向远洋——51(数组类运算的实现)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
随机推荐
- mysql的表和约束操作
在创建表是默认为加上数据引擎和字符集,如创建一个student表,代码如下: create table students(id int unsigned zerofill auto_increment ...
- September 16th 2017 Week 37th Saturday
We are all in the gutter, but some of us are looking at the stars. 身处艰难,但仍有人仰望星空. When standing on t ...
- 【Alpha】Daily Scrum Meeting——blog3
团队成员 吴吉键 201421122007(组长) 魏修祺 201421122008 孙劲林 201421122022 1. 会议当天照片 2. 每个人的工作 姓名 已完成工作 计划完成工作 遇到的困 ...
- HBase搭建部署
基础环境准备 zookeeper集群(参开地址:https://www.cnblogs.com/starzy/p/10376642.html) Hadoop集群(参考地址:https://www.cn ...
- 在CentOS7上部署 Kubernetes集群
yum -y install etcd docker flannel kubenetes 一般会遇到没有k8s源的问题,先 yum update -y 看是否有效,如果还是没用就创建yum 源,再 ...
- 1040. [ZJOI2008]骑士【树形DP】
Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各 界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战 ...
- this 的使用方法 —— javascript中的this讲解!
从自己刚刚开始学习javascript到现在已经很久了,今天得益于新酱的细心讲解,总算是把this这个“雾中花”看清晰了. 在此首先感谢新酱的讲解 下面将this的一些基本使用和大家分享一下: 查看t ...
- Java并发编程--6.Exchanger线程间交换数据
在两个线程之间定义同步点,当两个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,第二个线程的数据结构进入到第一个线程中 在生产者-消费者情境模式中它包含了一个数缓冲区 ...
- mongodb的学习-2-简介
http://www.runoob.com/mongodb/mongodb-intro.html 什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系 ...
- 统计Azure存储的HBase各表数据量
场景:HBase存储在Azure上,现在通过访问Azure Storage的接口,获取HBase中各个表的数据量. 注意: 1.Azure存储,默认的副本数为2,即共存3份,但只收1份的费用,取到的s ...