C#学习相关系列之多线程(七)---Task的相关属性用法

news2024/12/23 5:59:46

一、Task和Thread的区别

  1. 任务是架构在线程之上的,任务最终的执行还是要给到线程去执行的。
  2. 任务和线程之间不是一对一的关系,任务更像线程池,任务相比线程池有很小的开销和精确的控制。(总的来说Task的用法更为先进,在多线程的时候应该优先考虑Task)

 二、Task的相关属性

1.status 当前状态类属性(较多) 

  • Created :任务已经初始化。
  • WaitingForActivation:正在等待 .NET Framework 基础结构在内部将其激活并进行计划。
  • WaitingToRun:已被计划执行,但尚未开始执行。
  • Running:正在运行,但尚未完成。
  • WaitingForChildrenToComplete:已完成执行,正在隐式等待附加的子任务完成。
  • RanToCompletion:已成功完成执行的任务。
  • 已通过对其自身的 CancellationToken 引发 OperationCanceledException 对取消进行了确认,此时该标记处于已发送信号状态;或者在该任务开始执行之前,已向该任务的CancellationToken 发出了信号
  • Faulted:由于未处理异常的原因而完成的任务。

2. CurrentId:当前正在执行的任务id。(int)

3. IsCompleted:当前任务是否已经完成。(bool)

4. IsCanceled:任务是否由于被取消而完成。(bool)

5. ID:当前Task实例的Id。(int)
6. TaskCreationOptions 当前任务的优先级有以下七种:

  • None:默认行为。
  • PreferFairness: 以一种尽可能公平的方式安排任务,这意味着较早安排的任务将更可能较早运行,而较晚安排运行的任务将更可能较晚运行。
  • LongRuning:指定任务将是长时间运行的、粗粒度的操作,涉及比细化的系统更少、更大的组件。可以通过过度订阅创建比可用硬件线程数更多的线程。 它还将提示任务计划程序:该任务需要附加线程,以使任务不阻塞本地线程池队列中其他线程或工作项的向前推动。
  • AttachedToParent: 指定将任务附加到任务层次结构中的某个父级。
  • DenyChildAttach:指定任何尝试作为附加的子任务执行。
  • HideScheduler:防止环境计划程序被视为已创建任务的当前计划程序,当前计划程序。
  • RunContinuationsAsynchronously:强制添加到当前任务的延续任务。

 三、Task的常用方法

1.Wait(task) 等待当前task执行结束后执行。

代码演示:

        Task tt = Task.Run(() =>
            {
                for (int i = 0; i < 300; i++)
                {
                    Console.Write(1);
                }
            });
            tt.Wait();
            for (int i = 0; i < 300; i++)
            {
                Console.Write(2);
            }
            Console.ReadKey();

当代码中无tt.wait()时候,运行结果为1和2交替出现,反之会在tt任务运行完后,也就是输出1完成后再输出2。

2.WaitAll() 等待所有任务执行完成 。
3.WaitAny() 等待任意一个任务执行完成就执行。
4.ContinueWith() 第一个Task结束后自动执行下一个。

代码演示:

            Task<int> tt = Task<int>.Run(() =>
            {
                for (int i = 0; i < 300; i++)
                {
                    Console.Write(1);
                    
                }
                return 10;
            });
            tt.ContinueWith(T1 =>
            {
                for (int i = 0; i < 300; i++)
                {
                    Console.Write(2);
                }
                Console.WriteLine("tt的结果为:"+T1.Result);
            });

运行结果为:

ContinueWith的用法是在一个任务执行完成之后执行的代码,需要注意的是T1为前一个任务返回的结果。
5.CancellationTokenSource 取消一个任务。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1144695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能基础_机器学习008_使用正规方程_损失函数进行计算_一元一次和二元一次方程演示_sklearn线性回归演示---人工智能工作笔记0048

自然界很多都是正态分布的,身高,年龄,体重...但是财富不是. 然后我们来看一下这个y = wx+b 线性回归方程. 然后我们用上面的代码演示. 可以看到首先import numpy as np 导入numby 数据计算库 import matplotlib.pyplot as plt 然后导入图形画的库 然后: X = np.linspace(0,…

【计算机毕设经典案例】基于微信小程序的图书管理系统

前言&#xff1a;我是IT源码社&#xff0c;从事计算机开发行业数年&#xff0c;专注Java领域&#xff0c;专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 &#x1f449;IT源码社-SpringBoot优质案例推荐&#x1f448; &#x1f449;IT源码社-小程序优质案例…

数组与链表算法-数组与多项式

目录 数组与链表算法-数组与多项式 多项式数组表达式 C代码 数组与链表算法-数组与多项式 多项式是数学中相当重要的表达方式&#xff0c;如果使用计算机来处理多项式的各种相关运算&#xff0c;那么通常使用数组或链表来存储多项式。 多项式数组表达式 假如一个多项&…

网络安全(黑客技术)—小白自学

目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来分类&am…

PostgreSQL 基础知识

执行环境&#xff1a; psql 1. 创建一个表格 CREATE TABLE customers ( customer_id serial PRIMARY KEY,firstname VARCHAR(100) NOT NULL,lastname VARCHAR(100) NOT NULL,username VARCHAR(50) UNIQUE NOT NULL,password VARCHAR(50) NOT NULL,email VARCHAR(255) UNIQUE …

Go学习第十三章——Gin(请求与响应)

Go web框架——Gin&#xff08;请求与响应&#xff09; 1 响应1.1 String1.2 JSON&#xff08;*&#xff09;1.3 HTML&#xff08;*&#xff09;1.4 XML1.5 文件&#xff08;*&#xff09; 2 请求2.1 请求参数查询参数 (Query)动态参数 (Param)表单参数 (PostForm)原始参数 (Ge…

[导弹打飞机H5动画制作]飞机路线的随机起飞及自爆模拟

参考代码&#xff1a; this.btnOff.addEventListener("click", off.bind(this)); this.btnBomb.addEventListener("click", bomb.bind(this)); var _this this; var pb null; function off() {if (pb null) {pb new lib.sb1link();pb.x 600;pb.y 30…

Spring Cloud:三【详细】

目录 Http客户端Feign Feign的使用 Feign自定义配置 第一种方式 第二种方式 Feign的优化 Feign最佳实践方式 实现一 实现二 Http客户端Feign RestTemplate缺点是&#xff0c;url不统一&#xff0c;编写困难&#xff0c;可读性差&#xff0c;参数复杂难以维护。 这时…

【计算机网络笔记】DNS报文格式

DNS 提供域名到主机IP地址的映射  域名服务的三大要素&#xff1a;  域&#xff08;Domain&#xff09;和域名(Domain name)&#xff1a; 域指由地 理位置或业务类型而联系在一起的一组计算机构 成。  主机&#xff1a;由域名来标识。域名是由字符和&#xff08;或&a…

刚刚:腾讯云3年轻量2核2G4M服务器优惠价格366元三年

腾讯云3年轻量2核2G4M服务器&#xff0c;2023双十一优惠价格366元三年&#xff0c;自带4M公网带宽&#xff0c;下载速度可达512KB/秒&#xff0c;300GB月流量&#xff0c;50GB SSD盘系统盘&#xff0c;腾讯云百科txybk.com分享腾讯云轻量2核2G4M服务器性能、优惠活动、购买条件…

雷电_安卓模拟器安装burpsuit_CA证书

雷电_安卓模拟器安装burpsuit_CA证书 文章目录 雷电_安卓模拟器安装burpsuit_CA证书雷电模拟器官网&#xff1a;https://www.ldmnq.com 安装burpsuit证书1 打开雷电模拟器右上角的winfi图标 -->点击齿轮2 修改网络3 选择高级 —》手动4 查看真实机IP的地址&#xff0c;选择虚…

超分辨率重建——SESR网络训练并推理测试(详细图文教程)

最近学了一个超轻量化的超分辨率重建网络SESR&#xff0c;效果还不错。 目录 一、 源码包二、 数据集的准备2.1 官网下载2.2 网盘下载 三、 训练环境配置四、训练4.1 修改配置参数4.2 导入数据集4.3 2倍超分网络训练4.3.1 训练SESR-M5网络4.3.2 训练SESR-M5网络4.3.3 训练SESR…

Kitex踩坑 [Error] KITEX: processing request error,i/o timeout

报错问题 2023/010/28 17:20:10.250768 default_server_handler.go:234: [Error] KITEX: processing request error, remoteService, remoteAddr127.0.0.1:65425, errordefault codec read failed: read tcp 127.0.0.1:8888->127.0.0.1:65425: i/o timeout 分析原因 Hert…

【刷题笔记10.28】Leetcode:使括号有效的最少添加

Leetcode&#xff1a;使括号有效的最少添加 上代码 方法一&#xff1a;使用Deque 双向队列 /*** 方法一&#xff1a;使用Deque 双向队列* param s* return*/public int minAddToMakeValid(String s) {//1、将括号字符串转换为char[] 字符数组char[] data s.toCharArray();//2…

SDK 资源

目录 资源的使用 带资源的.exe文件的编译方式 向窗口发送消息 菜单 加载菜单 菜单消息 图标 光标 快捷键 字符串 资源的使用 在VS2019中&#xff0c;点击视图下的其他窗口&#xff0c;资源视图&#xff0c;就可以看到本项目的所有资源 鼠标右键添加-资源&#xff0c…

数据特征工程 | 主成分分析(Python)

特征抽取(feature extraction)和特征选择(feature selection)不一样,特征抽取是从原特征集中推导出有用的信息构成新的特征集。特征选择是从原特征集中选择一部分子集作为训练特征。 特征抽取将数据集从一个特征空间投影到了一个更低维度的特征空间。 主成分分析(princ…

C++设计模式_16_Adapter 适配器

Adapter 适配器也是属于“接口隔离”模式&#xff0c;也是间接思想在某一个层面的应用。 文章目录 1. 动机( Motivation)2. 模式定义3. 结构 (Structure)4. Adapter 适配器的代码实现5. 要点总结6. 其他参考 1. 动机( Motivation) 在软件系统中&#xff0c;由于应用环境的变化…

python:使用Scikit-image对遥感影像进行傅里叶变换特征提取(fourier)

作者:CSDN @ _养乐多_ 在本博客中,我们将介绍如何使用Scikit-Image来进行傅里叶变换特征提取(fourier),并且提供一个示例代码,演示了如何在单波段遥感图像上应用这些方法。 傅里叶变换特征提取是一种数学工具,用于将图像中的细节、纹理和边缘信息以不同频率的方式呈现…

[SpringCloud] Nacos 简介

目录 一、Nacos&#xff0c;启动&#xff01; 1、安装 Nacos 2、运行 Nacos 3、Nacos 服务注册 二、Nacos 服务多级存储模型 1、服务跨集群分配 2、NacosRule 负载均衡&#xff08;优先本地&#xff09; 3、服务实例的权重设置 4、环境隔离 三、Nacos 注册中心细节分…

私有云:【2】AD域的安装

私有云&#xff1a;【2】AD域的安装 1、使用vmwork创建虚拟机2、启动配置虚拟机3、安装域服务4、配置域服务器 1、使用vmwork创建虚拟机 新建虚拟机 稍后安装操作系统 选择win2012&#xff0c;如下图 设置名称及路径 分配硬盘大小&#xff0c;默认60G即可 镜像选择win2012的is…