首页 > 其他分享 >Task 笔记

Task 笔记

时间:2024-09-29 11:04:45浏览次数:1  
标签:Task cts 笔记 耗时 线程 stopwatch Parallel

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,cts,笔记,耗时,线程,stopwatch,Parallel
From: https://www.cnblogs.com/sexintercourse/p/18439187

相关文章

  • Mybatis学习笔记
    目录Mybatis简介MyBatis历史MyBatis特性MyBatis下载和其它持久化层技术对比搭建MyBatis开发环境创建maven工程创建MyBatis的核心配置文件创建mapper接口创建MyBatis的映射文件通过junit测试功能加入log4j日志功能核心配置文件详解默认的类型别名MyBatis的增删改查MyBatis获取参数......
  • ZYNQ学习笔记----------bd文件
    工具:Vivado18.3所用芯片:ZYNQ7000系列  作为一个刚入职的fpga工程师,不可避免地接触到公司前辈的工程项目(Vivado)。在看工程及分析其结构时,发现了design_1.bd文件;双击打开后发现其内部拥有多个模块,不解之下特意搜索相关资料进行学习。根据网上教程及相关资料,对bd文件的总结如......
  • 2024-09-28学习吴军博士《态度》笔记
    1.要注意你的态度,因为它影响你的想法。要注意你的想法,因为它决定你的言辞和行动。要注意你的言辞和行动,因为它主导你的行为。要注意你的行为,因为它会变成你的习惯。要注意你的习惯,因为它塑造你的性格。要注意你的性格,因为它决定你的命运。————撒切尔夫人,吴军博士补充第......
  • 【自动泊车】《Vacant Parking Slot Detection in the Around View Image Based on De
    1.参考论文地址:VacantParkingSlotDetectionintheAroundViewImageBasedonDeepLearning代码:GitHub-weili1457355863/VPS-Net:Avacantparkingslotdetectionmethodinthearoundviewimagebasedondeeplearning.2.摘要        带有独立全景监......
  • 【学习笔记】python数据可视化之matplotlib实践第二章
    使用统计函数绘制简单图形1.bar()函数:在x轴上绘制定性数据的分布特征,用于绘制柱状图函数基本参数介绍:plt.bar(x,height,color='c',edgecolor='y',width=0.8,align='center',tick_label=['白菜','卷心菜'],hatch='/')x柱状图的x轴坐标,每个数值对应于一个柱子的......
  • Redis学习笔记
    一、Redis简介1.1NOSQLNoSQL(NoSQL=NotOnlySQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型,web2.0纯动态网站已经显得力不从心,暴露了很多难以克服......
  • 折腾笔记[1]-打包ffmpeg-cli到单个wasm二进制
    摘要使用c2w打包ffmpeg-cli到单个wasm二进制,实现ffmpeg可执行文件平台无关运行(BuildOnce,RunAnywhere)。AbstractUsingc2wtopackagetheffmpeg-cliintoasinglewasmbinary,achievingplatform-independentexecutionoftheffmpegexecutable(BuildOnce,RunA......
  • CMake构建学习笔记18-cpp-httplib库的构建
    cpp-httplib库是笔者认为的一个比较好用的基于C++的Http服务器组件,与Eigen一样,它也是基于头文件的库,我们只需要引入httplib.h这个头文件进行来就实现所有基于http/https协议的功能,非常适合初学者进行使用。尽管是头文件,还是可以使用CMake进行构建,便于统一管理,关键脚本如下:#配置......
  • VulnHub-SickOs1.1靶机笔记
    SickOs1.1靶机笔记概述Vulnhub的靶机sickos1.1主要练习从互联网上搜索信息的能力,还考察了对代理使用,目录爆破的能力,很不错的靶机靶机地址:链接:https://pan.baidu.com/s/1JOTvKbfT-IpcgypcxaCEyQ?pwd=ytad提取码:ytad一、nmap扫描1)主机发现sudonmap-sn192.168.111.0/......
  • systemtap embedded C 踩坑笔记
    官方文档:https://sourceware.org/systemtap/langref/3_Components_SystemTap_scri.html#SECTION00045000000000000000打印systemtap的embeddedC中,不能#include<stdio.h>,也不能用printf和print。那怎么打印呢?用STAP_PRINTF。用法与printf一样。还可以访问cript中的全局变量。......