Task 笔记
1.计时器类Stopwatch
Stopwatch stopwatch=new Stopwatch()
stopwatch.Start();//开始计时
stopwatch.Stop();//停止计时
stopwatch.Reset();//重置计时时间
stopwatch.Restart();//重新开始计时==Reset()+Start()
2.Parallel类
Parallel.Invoke(Run1, Run2, Run3);//尽可能并行执行每个方法
Parallel.For(0,100,item=>{});//并行for循环
Parallel.ForEach(strs, item =>{});//并行foreach循环
ConcurrentBag<T> //线程安全集合,无序
List<T> //非线程安全集合,有序
list.AsParallel() //并行linq
3.异步等待
//对Task 返回类型,可以使用 Task.CompletedTask 结束方法
//对Task<T> 可以使用 Task.FromResult(result) 结束方法
//在同步方法中调用异步方法:
//有返回值:
string s1 = File.ReadAllTextAsync("d:/1.txt").Result;
string s1 = File.ReadAllTextAsync("d:/1.txt").GetAwaiter().GetResult();
//无返回值:
ile.ReadAllTextAsync("d:/1.txt").Wait();
4.
//线程池是单例的,全局唯一
ThreadPool.SetMaxThreads(8,8)//设置最多开启8个线程
//程序会等待所有前台线程执行完才会结束,而不会等待后台线程
//Task 创建的都是后台线程,默认是线程池线程,可以设置 TaskCreationOptions.LongRunning 指定为长时间运行的任务,就不是线程池线程了
Task task = new Task(() => Console.WriteLine("aaa"), TaskCreationOptions.LongRunning);
5.任务取消
CancellationTokenSource cts = new CancellationTokenSource();//取消令牌
Task.Run(() =>
{
Console.WriteLine($" {j} 任务开始...");
Thread.Sleep(300);//耗时操作
if (cts.IsCancellationRequested)//在耗时操作开始之前判断
return;
Thread.Sleep(300);//耗时操作
Console.WriteLine($" {j} 任务结束...");
}, cts.Token);
if (cts.IsCancellationRequested)//在任务开始之后,在耗时操作开始之前判断,手动控制不执行后续操作,节省资源
Task.Run(()=>{},cts.Token) //在这里设置取消令牌,如果在任务开始之前就取消,那么该任务不会被创建,节省资源
6. AsyncLocal
AsyncLocal<T> 用这个可以给子线程共享变量 这个会记录类似 [线程id-值] 字典,区分不同线程的值
子线程默认获取到父线程的值,但是子线程如果改变了值,父线程不会影响。
可用于跨请求区分变量。不同请求,线程一定不同,存的线程id不同 就能区分值。
Task 笔记的更多相关文章
- c# task笔记
class Program { //创建Task任务的三种方式(无返回值) static void Main(string[] args) { //方法一 Task task1 = new Task( ...
- 【Hadoop代码笔记】Hadoop作业提交之TaskTracker获取Task
一.概要描述 在上上一篇博文和上一篇博文中分别描述了jobTracker和其服务(功能)模块初始化完成后,接收JobClient提交的作业,并进行初始化.本文着重描述,JobTracker如何选择作业 ...
- Android菜鸟的成长笔记(13)——异步任务(Async Task)
原文:[置顶] Android菜鸟的成长笔记(13)——异步任务(Async Task) Android的UI线程主要负责处理用户的事件及图形显示,因此主线程UI不能阻塞,否则会弹出一个ANR(App ...
- WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)
WebAPI调用笔记 前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- spark 笔记 15: ShuffleManager,shuffle map两端的stage/task的桥梁
无论是Hadoop还是spark,shuffle操作都是决定其性能的重要因素.在不能减少shuffle的情况下,使用一个好的shuffle管理器也是优化性能的重要手段. ShuffleManager的 ...
- spark 笔记 12: Executor,task最后的归宿
spark的Executor是执行task的容器.和java的executor概念类似. ===================start executor runs task============ ...
- spark 笔记 9: Task/TaskContext
DAGScheduler最终创建了task set,并提交给了taskScheduler.那先得看看task是怎么定义和执行的. Task是execution执行的一个单元. Task: execut ...
- MapReduce剖析笔记之三:Job的Map/Reduce Task初始化
上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...
- 异步-学习笔记3 Task
1. 通过Task启动多线程 2. 解决多线程的几大应用场景 private void btnTask_Click(object sender, EventArgs e) { Console.Writ ...
随机推荐
- 学习笔记--Java中方法递归调用
Java中方法递归调用 public class RecursionTest01{ public static void main(String[] args){ System.out.println ...
- 广州大学第十八届ACM大学生程序设计竞赛(同步赛)——题解
这套题我答的很失败.没有按照题目的难度去答题,前期浪费了不少时间. 题目: A-字符画 题解:思维.模拟.这道题我的通过率为62.5,没有过的原因是因为对细节的处理和把控不到位,对一些点忽视,我也记录 ...
- 【工具】SpringBoot项目如何查看某个maven依赖是否存在以及依赖链路
当我在SpringBoot项目中想加个依赖,但是不确定现有依赖的依赖的依赖.....有没有添加过这个依赖,怎么办呢?如果添加过了但是不知道我需要的这个依赖属于哪个依赖的下面,怎么查呢? IDEA中提供 ...
- Android低功耗子系统的投票机制以及触发进入系统休眠的过程
从kernel角度看,系统是否进入休眠应该由内核来控制,因此Linux引入了 wakeup source以及autosleep机制 关于wakeup source的介绍,请参考: Wakeup Sou ...
- blender建模渲染Tips
blender渲染 灯光的三种方式 1,常规灯光:shift+A选择灯光. 2,世界环境光:右侧地球图标调整. 3,物体自发光:把渲染物体变成一个发光体来进行调节灯光. 渲染视窗的调节 ctrl+b裁 ...
- Google公司的python编码规范指南
原文地址: https://google.github.io/styleguide/pyguide.html ============================================= ...
- 为python编译C++模块时一定要注意的事情—————不要在anaconda环境下使用cmake来编译C++扩展模块!!!
平时搞python的人很多都会有安装C++扩展模块的需求,而往往这些C++模块都是使用CMAKE做编译配置的,但是如果你这时候shell环境是使用anaconda的话,那么cmake默认调用的GCC和 ...
- vue之父组件与子组件的通信
1.背景 参数传递(多理解) 1.父传子<c-parent :messagevue="message"></c-parent>,请看下面具体的截图描述 2. ...
- 字符串系列目录&&说明
字符串准备写成一个系列. 目录 \(\text{KMP笔记}\) \(\text{Manacher笔记}\) [] [] [] 格式与说明 下面的说明和格式将被应用于整个系列. 说明 所有字符串的下标 ...
- Java学习笔记1--JDK,JRE和JVM
1.Java开发环境 Java开发环境是指Java程序员开发.编写.测试和调试Java程序所使用的所有工具和技术.Java开发环境通常由以下几个部分组成: JDK(Java Development K ...