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 ...
随机推荐
- ffmpeg精简
自:http://www.chinavideo.org/viewthread.php?tid=5567&extra=page%3D1&page=2 现在更新一下目前遇到的问题: 我想裁 ...
- 【Vue】 签名组件
一.需求背景: 检查业务,检查完成后,执行人需要签字证明检查完成 二.实现效果: 三.技术实现 通过canvas转换成blob对象,可以上传到文件服务,或者是下载另存为到本地磁盘 注意重点,canva ...
- Google的蛋白质结构预测项目代码(Demo)
相关: Artificial Intelligence | 60 Minutes Full Episodes
- java多线程之sleep 与 yield 区别
1.背景 面试中经常会被问到: sleep 与 yield 区别 2.代码 直接看代码吧! package com.ldp.demo01; import com.common.MyThreadUtil ...
- 社区6月月报 | Apache SeaTunnel重要更新与优化记录
各位热爱Apache SeaTunnel的小伙伴们,社区6月份月报来啦!这里将记录Apache SeaTunnel社区每月的重要更新,欢迎关注. 月度Merge Stars 感谢以下小伙伴上个月为Ap ...
- 系统IO常用函数接口
本文整理归纳了几种常用的系统IO的函数借口,以供读者查阅使用 目录 系统IO与标准IO的区别 打开文件:open 关闭文件:close 文件读取:read 文件写入:write 位置偏移:lseek ...
- 解决Windows突然自动重启卡logo
一般重启后或者卡logo我们需要查看日志 进入后查看日志 点击筛选当前日志 输入eventlog 找到重启的时间错误ID,记住这个事件ID 我们再次点击筛选当前日志页面 选择清除,点击确定 然后我们找 ...
- git忽略文件夹中除了指定的文件外的其他所有文件
**/test/* !**/test/a.py
- linux中级——libcurl库访问百度
libcurl简介: libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议.libcurl同样支持H ...
- 将文件的换行符由 CRLF 转换为 LF
在 DOS/Windows 文本文件中,换行,也称为新行,是两个字符的组合:回车(CR)后跟一个换行(LF).在 Unix 文本文件中,一行的换行是单个字符:换行(LF).在 Mac 文本文件中,在 ...