代码:

#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 =
};
Parallel.For(, , options, t => { Console.WriteLine("结果:" + t.ToString()); });
Parallel.For(, , options, (t, state) => {
Console.WriteLine("结果:" + t.ToString());
//state.Break();//
//state.Stop();//
//return;
});
}
#endregion

Task/Parallel实现异步多线程的更多相关文章

  1. .NET 异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消

    今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...

  2. NET 异步多线程,THREAD,THREADPOOL,TASK,PARALLEL

    .NET 异步多线程,THREAD,THREADPOOL,TASK,PARALLEL,异常处理,线程取消 今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主 ...

  3. .NET异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消

    今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...

  4. 异步和多线程,委托异步调用,Thread,ThreadPool,Task,Parallel,CancellationTokenSource

    1 进程-线程-多线程,同步和异步2 异步使用和回调3 异步参数4 异步等待5 异步返回值 5 多线程的特点:不卡主线程.速度快.无序性7 thread:线程等待,回调,前台线程/后台线程, 8 th ...

  5. C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq). 其次是TAP(Task-based Asynchronous Pattern, 基于任务的异步模式)

    学习书籍: <C#本质论> 1--C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq). 其次是 ...

  6. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  7. TPL(Task Parallel Library)多线程、并发功能

    The Task Parallel Library (TPL) is a set of public types and APIs in the System.Threading and System ...

  8. .Net进阶系列(10)-异步多线程综述(被替换)

    一. 综述 经过两个多个周的整理,异步多线程章节终于整理完成,如下图所示,主要从基本概念.委托的异步调用.Thread多线程.ThreadPool多线程.Task.Parallel并行计算.async ...

  9. Task Parallel Library01,基本用法

    我们知道,每个应用程序就是一个进程,一个进程有多个线程.Task Parallel Library为我们的异步编程.多线程编程提供了强有力的支持,它允许一个主线程运行的同时,另外的一些线程或Task也 ...

随机推荐

  1. 使用javascript连接mqtt协议(自动重连问题)

    因为之前是在rabbitmq的插件"RabbitMQ Web MQTT plugin "中看到使用了mqttws31.js的实例,由于对mqttws31不了解,网上下载了连接成功, ...

  2. Spark 编程模型(下)

    创建Pair RDD 什么是Pair RDD 创建Pair RDD Pair RDD的转化操作 Pair RDD的转化操作1 在xshell启动 reduceByKey的意思是把相同的key的valu ...

  3. idea 安装 破解方法

    参考:https://blog.csdn.net/qq_27686779/article/details/78870816 (1)下载破解补丁 把下载的破解补丁放在你的idea的安装目录下的bin的目 ...

  4. VB 调用动态链接库

    作为一种简单易用的Windows开发环境,Visual Basic从一推出就受到了广大编程人员的欢迎.它使 程序员不必再直接面对纷繁复杂的Windows消息,而可以将精力主要集中在程序功能的实现上,大 ...

  5. 机器学习入门-贝叶斯中文新闻分类任务 1. .map(做标签数字替换) 2.CountVectorizer(词频向量映射) 3.TfidfVectorizer(TFDIF向量映射) 4.MultinomialNB()贝叶斯模型构建

    1.map做一个标签的数字替换 2.vec = CountVectorizer(lowercase=False, max_features=4000)  # 从sklean.extract_featu ...

  6. Spring MVC @InitBinder 数据绑定 & 数据格式化 & 数据校验

    1 数据绑定 2 数据格式化 修改绑定的字段等等操作 日期 - 接收表单日期字符串格式内容.,在实体类加入@DateTimeFormat 数值 原理: DefautFormattingConversi ...

  7. 前端-CSS-3-高级选择器

    高级选择器 总结: <!-- 总结: 基础选择器: 1.标签选择器 div 2.类选择器 .div1 3.id选择器 #box 4.通配符选择器 * 高级选择器: 1.群组选择器 中间用, .t ...

  8. vue基础——模板语法

    模板语法介绍 Vue.js使用了基于HTML的模板语法,允许开发者声明式地将dom绑定至底层Vue实例的数据.所有Vue.js的模板都是合法的HTML,所以能被遵循规范的浏览器和HTML解析器解析. ...

  9. python生成可执行文件保护源码

    工作中由于需要防止源代泄漏,需要将源代码隐藏,找到两种方法: 1.使用python生成的pyc文件. 这种方法的优点就是pyc文件生成很容易,缺点则是很容易通过工具得到源码,并且python版本不一致 ...

  10. git命令图片