一.介绍

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异步加快对数组的运算的更多相关文章

  1. C# 使用SIMD向量类型加速浮点数组求和运算(1):使用Vector4、Vector<T>

    作者: 目录 一.缘由 二.使用向量类型 2.1 基本算法 2.2 使用大小固定的向量(如 Vector4) 2.2.1 介绍 2.2.2 用Vector4编写浮点数组求和函数 2.3 使用大小与硬件 ...

  2. Task异步编程

    Task异步编程中,可以实现在等待耗时任务的同时,执行不依赖于该耗时任务结果的其他同步任务,提高效率. 1.Task异步编程方法签名及返回值: a) 签名有async 修饰符 b) 方法名以 Asyn ...

  3. 『审慎』.Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历

    异步Task简单介绍 本标题有点 哗众取宠,各位都别介意(不排除个人技术能力问题) —— 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 —— 异步编 ...

  4. Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历

    Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历 https://www.cnblogs.com/shuxiaolong/p/DotNet_Task_BUG.html 异步Task简单 ...

  5. 5_PHP数组_3_数组处理函数及其应用_9_数组集合运算函数

    以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 数组集合运算函数 1. array_merge() 函数 程序: <?php $array1 = array ...

  6. numpy数组的运算

    numpy数组的运算 数组的乘法 >>> import numpy as np >>> arr=np.array([[1,2,3],[4,5,6]]) >&g ...

  7. C# 将 Begin 和 End 异步方法转 task 异步

    在 .NET Framework 有两个不同的异步方法,一个是 Asynchronous Programming Model (APM) 另一个是 Task-based asynchronous pa ...

  8. c#中的Task异步编程

    https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/index翻译 1. 引入 Task异步 ...

  9. C++走向远洋——51(数组类运算的实现)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

随机推荐

  1. 一、HTML概述 二、web相关的概念 三、HTML的常用标签

    一.HTML概述###<1>概念 HTML:Hypertext Markup Language,超文本 标记语言,用来描述网页的一种语言. 非编程语言,由浏览器直接解释运行. ###< ...

  2. python3: 字符串和文本(3)

    11. 删除字符串中不需要的字符  strip() 方法能用于删除开始或结尾的字符: lstrip() 和 rstrip() 分别从左和从右执行删除操作 >>> s = ' hell ...

  3. JS 正则 /g 注意事项

    JS 正则 /g 注意事项 字数1066 阅读0 评论0 喜欢0 js中正则表达式的全局匹配模式 /g用法详细 瞎扯 使用正则表达式来做表单验证的时候,遇到如下一个鬼东西, 匹配正则的时候,同样的数据 ...

  4. 浅析JS中的堆内存与栈内存

    最近跟着组里的大佬面试碰到这么一个问题, Q:说说var.let.const的区别 A:balabalabalabla... Q:const定义的值能改么? A:你逗我?不能吧 不知道各位看官怎么想? ...

  5. hadoop学习;hdfs操作;执行抛出权限异常: Permission denied;api查看源代码方法;源代码不停的向里循环;抽象类通过debug查找源代码

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010026901/article/details/26587251 eclipse快捷键alt+s ...

  6. Golang格式化小结

    Golang的格式化使用了与c.python等语言类似的风格,但是更加丰富和通用.格式化函数在fmt包中,如:fmt.Printf,fmt.Fprintf,fmt.Sprintf,fmt.Printl ...

  7. 1055. [HAOI2008]玩具取名【区间DP】

    Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替, ...

  8. 【转】JS实现继承的几种方式

    既然要实现继承,那么首先我们得有一个父类,代码如下: // 定义一个动物类 function Animal (name) { // 属性 this.name = name || 'Animal'; / ...

  9. 使用Message

    Message按照定义解释就是topic内容的数据类型, 也称之为topic的格式标准. 1.结构与类型 基本的msg包括bool. int8. int16. int32. int64(以及uint) ...

  10. python js 处理弹窗图片

    内置函数 : driver.execute_script() 2.自定义弹窗 由于alert弹窗不美观,现在大多数网站都会使用自定义弹窗,使用Selenium自带的方法就驾驭不了了,此时就要搬出JS大 ...