代码:

#region Task 异步多线程,Task是基于ThreadPool实现的{//TestClass testClass = new TestClass();//Action<object> action = new Action<object>(t => testClass.TestThread(t.ToString()));//TaskFactory taskFactory = new TaskFactory();//List<Task> taskList = new List<Task>();//for (int i = 0; i < 5; i++)//{//    Task task = taskFactory.StartNew(action, "task" + i);//    taskList.Add(task);//}//同步等待////1.1所在线程等待,目前在主线程,等待某一个Task执行完毕,只要有一个完成,就继续往下执行。会卡住主线程。//Task.WaitAny(taskList.ToArray());//Console.WriteLine("某一个Task执行完毕");////1.2所在线程等待,目前在主线程,直到所有Task执行完毕;会卡住主线程。//Task.WaitAll(taskList.ToArray());//Console.WriteLine("所有Task执行完毕");////2.1回调等待////不卡主线程,所有Task完成,才执行下面的操作//taskFactory.ContinueWhenAll(taskList.ToArray(), taskArray =>//{//    Console.WriteLine("taskFactory.ContinueWhenAll {0}", Thread.CurrentThread.ManagedThreadId);//    foreach (var item in taskArray)//    {//        Console.WriteLine(item.AsyncState);//        Console.WriteLine(item.IsCompleted);//    }//});////2.2回调等待////不卡主线程,有一个Task完成,就执行下面的操作//taskFactory.ContinueWhenAny(taskList.ToArray(), taskAction =>//{//    Console.WriteLine("taskFactory.ContinueWhenAny {0}", Thread.CurrentThread.ManagedThreadId);//    Console.WriteLine(taskAction.AsyncState);//    Console.WriteLine(taskAction.IsCompleted);//});
            }#endregion#region Parallel 基于Task实现,多个任务并行计算,主线程也会计算,其实就是Task+WaitAll,一定会卡住主线程{//Console.WriteLine("主线程的ID:{0}", Thread.CurrentThread.ManagedThreadId);//Parallel.Invoke(() => { Console.WriteLine("当前线程的ID:{0}", Thread.CurrentThread.ManagedThreadId); },//    () => { Console.WriteLine("当前线程的ID:{0}", Thread.CurrentThread.ManagedThreadId); },//    () => { Console.WriteLine("当前线程的ID:{0}", Thread.CurrentThread.ManagedThreadId); },//    () => { Console.WriteLine("当前线程的ID:{0}", Thread.CurrentThread.ManagedThreadId); },//    () => { Console.WriteLine("当前线程的ID:{0}", Thread.CurrentThread.ManagedThreadId); });////全部完成后,进入下一步,看上去就像同步编程//Parallel.ForEach<int>(new int[] { 1, 2, 3, 4, 5 }, t =>//{//    Console.WriteLine("当前线程ID:{0},结果:{1}", Thread.CurrentThread.ManagedThreadId, t * t);//    Thread.Sleep(100);//});//
                ParallelOptions options = new ParallelOptions(){MaxDegreeOfParallelism = 5};Parallel.For(0, 1000, options, t => { Console.WriteLine("结果:" + t.ToString()); });Parallel.For(0, 1000, options, (t, state) => {Console.WriteLine("结果:" + t.ToString());//state.Break();////state.Stop();////return;
                });}#endregion

转载于:https://www.cnblogs.com/xsj1989/p/7833682.html

Task/Parallel实现异步多线程相关推荐

  1. 异步多线程之入门必知

    下一篇:异步多线程之入Thread 简介 今天来谈谈异步多线程,做网站服务的同学都知道,Web 应用是天生的异步多线程,无论做 Winform.WPF.Webform 等,异步多线程的应用是非常广泛的 ...

  2. c#进阶(1)—— Task Parallel Library 并行执行与串行执行

    本文参考的博文出处:http://www.cnblogs.com/stoneniqiu/p/4857021.html 总体说明: (1).理解硬件线程和软件线程 硬件线程也称为逻辑内核,一个物理内核可 ...

  3. 异步多线程(五)多线程异常处理

    异步多线程(五)多线程异常处理 参考文章: (1)异步多线程(五)多线程异常处理 (2)https://www.cnblogs.com/JohnTang/p/11010357.html (3)http ...

  4. 初识php异步多线程扩展swoole

    Swoole是一种PHP高级Web开发框架,框架不是为了提升网站的性能,是为了提升网站的开发效率.最少的性能损耗,换取最大的开发效率.利用Swoole框架,开发一个复杂的Web功能,可以在很短的时间内 ...

  5. 【Python】单线程异步多线程多进程实例

    上一篇文章主要介绍了多任务场景下单线程异步.多线程.多进程如何选择,链接:多任务场景下单线程异步多线程多进程 这里主要通过三个实例去验证一下简单的多任务场景下,三种方式的耗时情况,假设有10个互不关联 ...

  6. python异步多线程

    Python异步多线程 首先,我们需要先明白同步和异步的区别: 同步:同步是指一个进程在执行某个请求的时候,如果该请求需要一段时间才能返回信息,那么这个进程会一直等待下去,直到收到返回信息才继续执行下 ...

  7. Springboot异步多线程编程

    文章目录 一.基础知识 二.什么时候用同步&异步 三.什么时候需要使用多线程 四.springboot异步多线程编程实现 一.基础知识 同步:同步就是指一个进程在执行某个请求的时候,若该请求需 ...

  8. 同步与异步多线程的区别

    先需要讲解一下计算机的基本概念: 进程:一个程序在操作系统上运行时,占用操作系统的资源,起名叫进程. 线程:线程是程序执行的最小单位,进程在执行任何一个操作或者响应,都是由线程完成的,执行过程中,使用 ...

  9. C#中异步多线程的常见用法

    先来看几个基本概念(纯属个人见解,可能不准确): 进程:程序运行时,占用的全部运行资源的总和. 线程:线程是隶属于操作系统管理的,也可以有自己的计算资源,是程序执行流的最小单位.任何的操作都是由线程来 ...

最新文章

  1. 构建你的第一个Vue.js组件
  2. python里dir是什么意思_python中dir什么作用
  3. java latlng_【LBS】移动互联网基于LBS地理位置应用java开发必备
  4. 轻松得到C# ADO.NET的各种数据库连接字符串
  5. OpenCV 霍夫圆变换Hough Circle Transform
  6. springmvc 全局编码_SpringMVC-设置UTF-8编码
  7. FreeSql (十七)联表查询
  8. Android 7.0后 播放U盘中的视频文件的解决方案
  9. 思科下一代模拟器EVE-NG做一个不同VLAN互通实验
  10. 信息隐藏预测算法之MED
  11. 【Android测试】AndroidStudio通过UIAutomator进行测试
  12. CMD命令备份驱动和安装驱动
  13. 妄想山海测试服下载for android,妄想山海测试服
  14. 计算机无法识别新挂硬盘,windows10系统添加新硬盘识别不了如何解决
  15. todesk无法连接网络
  16. 几万年前,有一只猴子大闹地府后删库跑路
  17. 线性回归预时间序列预测
  18. JSH_ERP华夏ERP开发配置
  19. 如何高效管理工作微信
  20. 食堂总是拥挤不堪?解决用餐拥挤,教你一招

热门文章

  1. php获取所有url地址_PHP_php 获取完整url地址,主要是获取到地址栏的一些信 - phpStudy...
  2. android design support library最新版,总结一下现在关于Design Support Library的几个博客...
  3. java程序流程_java程序流程控制
  4. win10一直正在检查更新_教你解决“Win10系统更新失败后循环重启安装”的解决方法...
  5. 集成学习(一)——随机森林以及GBDT
  6. flask ajax 文件上传,使用ajax上传Python flask文件请求.files空的
  7. 定点补码加减法运算_计算机相关问题:谈谈我眼中的补码
  8. rmmod无法卸载驱动_从hello world到LED驱动
  9. python 打印皮卡丘_来简单聊聊python的装饰器呀~
  10. 将两个不同格式的XML文件,进行节点对照,并生成一个用于对照功能的XML