c#基础1

C#关键字

c#的静态类与c++一样,不能够实例化,可以直接通过这个类调用内部的public方法和变量,

partial 修饰的类可以分离内部的实现,可以定义在分散的文件中。

sealed修饰的类:类似于最终类,不能够被继承,但是在代码编译阶段可以对代码进行优化。

BlockingCollection<T>数据结构,允许在多个线程中安全读写,主要用于生产者消费者模式。其特点主要如下:1、线程安全;2、有阻塞操作;3、限流;4、同步。主要操作如下:

//添加项目:
Add(T iteam) ;  //可以阻塞
TryAdd(T item);//如果队列满了,则失败//获取项目
Take();        //移除并返回一个项目
TryTake();    //集合为空,则失败//属性操作
Count();      //返回当前集合的项数
IsAddingCompleted() ;    //获取一个值,指示添加操作。

C#异步线程

        在 C# 中,异步线程可以通过 asyncawait 关键字结合任务 (Task) 来实现,其中async 关键字用于修饰函数名,await 关键字通常表示调用异步方法,同时等待异步方法执行。异步编程能够执行长时间运行的操作(如 I/O 操作、数据库查询、网络请求等)而不会阻塞主线程,特别是用户界面的线程。

using System;
using System.Threading.Tasks;class Program
{static async Task Main(string[] args){Console.WriteLine("开始异步操作...");// 调用异步方法await DoWorkAsync();Console.WriteLine("异步操作结束.");}// async 关键字,声明了一个异步方法,模拟一些长时间运行的任务static async Task DoWorkAsync(){Console.WriteLine("异步操作正在进行...");// 模拟耗时操作 (3秒)await Task.Delay(3000);  // 让这个任务异步等待3秒Console.WriteLine("异步操作完成.");}
}

同时可以使用Task.Run()的方法来执行异步任务。

public async Task DoHeavyWorkAsync()
{// 将任务委派给后台线程await Task.Run(() =>{// 模拟一个耗时操作for (int i = 0; i < 10; i++){Console.WriteLine("正在工作...");Thread.Sleep(500); // 模拟耗时}});Console.WriteLine("任务完成");
}

当然有时候为了不同间隔时间执行多个异步任务,通常会采用如下的形式进行;

//步骤1:声明相关变量
//声明CancellationTokenSource 用于异步任务的取消以及判断任务是否执行
private CancellationTokenSource cancellationTokenSource;//声明一个队列,让所有异步线程的执行动作加入到队列中
private ConcurrentQueue<Action> actionqueue = new ConcurrentQueue<Action>();//步骤2:点击按钮之后,开始判断任务是否开始
private void button2_Click(object sender, EventArgs e)
{//如果已经有任务在运行,先取消之前的任务if (cancellationTokenSource != null){cancellationTokenSource.Cancel();}// 创建新的 CancellationTokenSourcecancellationTokenSource = new CancellationTokenSource();// 启动三个定时任务StartButtonClickTasks(cancellationTokenSource.Token);
}//步骤3:声明不同异步线程中的任务
private async void StartButtonClickTasks(CancellationToken token)
{// 启动线程1,每隔10ms点击按钮1 Task thread1Task = RunTaskEveryInterval(10, () => button_read_Click(button_read, EventArgs.Empty), token);// 启动线程2,每隔300ms点击按钮2Task thread2Task = RunTaskEveryInterval(300, () => button_write_Click(button_write, EventArgs.Empty), token);//启动线程3,每隔10ms执行一次Task thread3Task = RunTaskEveryInterval(10, Thread_queue_work, token);// 等待三个任务完成await Task.WhenAll(thread1Task, thread2Task, thread3Task);}//步骤4:执行每个任务的Action
private async Task RunTaskEveryInterval(int intervalMs, Action action, CancellationToken token)
{while (!token.IsCancellationRequested){//对于不同的线程执行不一样的动作if(action == Thread_queue_work) {action();}else{actionqueue.Enqueue(action);}await Task.Delay(intervalMs); // 等待指定间隔}
}//步骤5:点击停止按钮之后,停止所有线程
private void stoptest_Click(object sender, EventArgs e)
{cancellationTokenSource?.Cancel();}

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

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

相关文章

深入了解 Flannel(3):vxlan在flannel中的作用

在 Flannel 中&#xff0c;VXLAN 主要用来解决以下问题&#xff1a; 1. 跨主机 Pod 之间的通信 问题&#xff1a;在 Kubernetes 集群中&#xff0c;Pod 通常分布在多个物理主机上。直接通过物理网络进行通信时&#xff0c;可能会面临 IP 地址冲突和路由问题。解决方案&#x…

[openwrt-21.02]openwrt-21.02 增加固件编译日期时间及git记录到openwrt_release文件

Openwrt版本 NAME="OpenWrt" VERSION="21.02-SNAPSHOT" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 21.02-SNAPSHOT" VERSION_ID="21.02-snapshot" HOME_URL="https://openwrt.org/" …

第十七周:机器学习笔记

第十七周周报 摘要Abstratc一、机器学习——生成式对抗网络&#xff08;Generative Adversarial Networks | GAN&#xff09;——&#xff08;中&#xff09;1. GAN 的理论介绍2. 用JS散度训练存在的问题3. WGAN 算法4. 拓展——流体 总结 摘要 本周周报主要对GAN进行了详细的…

【算法日记】 最大战力值

问题描述 疫情使得人们线下社交隔离&#xff0c;进而刺激了宅娱乐经济&#xff0c;令手机游戏市场份额再次创新纪录。一款手机游戏一般有很多角色&#xff0c;每个角色都可以设定一个战力值。为了平衡每个角色的能力&#xff0c;提升玩家的游戏体验&#xff0c;游戏策划往往会…

学习笔记——交换——STP(生成树)工作原理

三、工作原理 STP的基本原理是在一个有二层环路的网络中&#xff0c;交换机通过运行STP&#xff0c;自动生成一个没有环路的网络拓扑。这个无环网络拓扑也叫做STP树(STP Tree)&#xff0c;树节点为某些交换机&#xff0c;树枝为某些链路。当网络拓扑发生变化时&#xff0c;STP…

js简单基础笔记

一 . js特点 1. Js是一门解释型语言&#xff0c;不用编译&#xff0c;而是直接执行 2. js是一门动态语言&#xff0c;其中的任何内容都是不确定的 3. 语法结构和Java&#xff0c;c都很像 4. ​ js是一门面向对象的语言 5.js严格区分大小写 二 . js使用 1…

linux笔记(yum本地源仓库搭建)

一、准备工作 安装必要的软件包 在大多数 Linux 发行版中&#xff0c;Yum 已经默认安装。如果系统中没有安装&#xff0c;可以根据发行版的包管理器进行安装。 准备本地源文件 可以是光盘镜像&#xff08;如果是从光盘安装系统&#xff09;&#xff0c;或者是已经下载好的系…

TiDB 新版本:更稳、更快、更好的数据库体验

作者&#xff1a; TiDB社区小助手 原文来源&#xff1a; https://tidb.net/blog/2d33d7db 本文内容出自&#xff1a;PingCAP 高级顾问 蓝功儒老师 在 9 月 21 日 TiDB 新版本 Meetup 中&#xff0c;PingCAP 高级顾问蓝功儒老师为我们带来了关于 TiDB 新版本的深入分享。TiD…

基于LORA的一主多从监测系统_数据发送

数据上传我这里使用了问询的方式&#xff0c;这样的好处一是可以用来统计节点的存活状态&#xff0c;二是可以避免冲突&#xff0c;主节点通过向从节点发送问询帧&#xff0c;从节点收到问询帧后开始向主节点发送数据&#xff0c;同时我们也可以加入不同的帧类型&#xff0c;比…

golang的net包

https://learnku.com/docs/the-way-to-go/151-tcp-server/3703 https://www.bilibili.com/video/BV1JP4y1s7rS net包介绍 net包的底层实现依赖于操作系统的网络API。net包提供了跨平台的网络编程接口&#xff0c;使得开发者可以在不同的操作系统上进行网络编程而无需担心底层实…

在数据库中,`SELECT`, `FROM`, `JOIN`, `ON`, 和 `WHERE`各自的作用

在数据库中&#xff0c;SELECT, FROM, JOIN, ON, 和 WHERE 关键字是 SQL 查询语句中用于检索数据的重要部分。它们各自在查询中扮演着不同的角色&#xff0c;但通常一起使用来构造复杂的数据检索操作。下面是它们各自的作用&#xff1a; 1. **SELECT**: - SELECT 关键字用于指…

通用序列化和反序列化实现思路

本文简单的记录一下采用模板来实现序列化与反序列的思路&#xff0c; 同时采用C20标准的concept和requires来简化模板函数的选择。 首先了解一下自定义类支持序列化的两种方式&#xff1a; 一、序列化自定义类型&#xff08;侵入式&#xff09; struct Test {std::string na…

4.three.js网格模型介绍和绘制基础点、线、面

4.three.js网格模型介绍和绘制基础点、线、面 1、计算机中3D世界的组成 在计算机世界里&#xff0c;3D世界是由点组成&#xff0c;两个点能够组成一条直线&#xff0c;三个不在一条直线上的点就能够组成一个三角形面&#xff0c;无数三角形面就能够组成各种形状的物体&#x…

Linux基础项目开发day05:量产工具——页面系统

文章目录 一、数据结构抽象page_manager.h 二、页面管理器page_manager.c 三、单元测试1、main.page.c2、page_test.c3、Makefile修改3.1、unittest中的Makefile3.2、page中的Makefile 四、上机实验 前言 前面实现了显示、输入、文字、UI系统&#xff0c;现在我们就来实现页面的…

Axure树形菜单展开与折叠

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;Axure树形菜单展开与折叠 主要内容&#xff1a;树形菜单制作——层级关系——隐藏与显示——值的变化——多层交互 应用场景&#xff1a;关系树、菜…

Python学习的自我理解和想法(15)

学的是b站的课程&#xff08;千锋教育&#xff09;&#xff0c;跟老师写程序&#xff0c;不是自创的代码&#xff01; 今天是学Python的第15天&#xff0c;从今天开始&#xff0c;每天一到两个常用模块&#xff0c;更完恢复到原来的&#xff0c;开学了&#xff0c;时间不多&am…

滚雪球学Redis[9.1讲]:Redis的常见问题与最佳实践

全文目录&#xff1a; 前言1. Redis的常见问题排查常见错误信息与解决方案性能瓶颈的识别与处理数据一致性问题的排查 2. Redis的最佳实践Redis使用中的通用原则典型业务场景中的最佳实践如何避免Redis中的反模式 小结下期预告 前言 在上一章【第八章&#xff1a;Redis的扩展与…

Java 直接获取 pom.xml 配置的属性值

Java 直接获取 pom.xml 配置的属性值 1.需求描述2.代码示例3.结果演示 系统&#xff1a;Win10 JDK&#xff1a;1.8.0_351 IDEA&#xff1a;2022.3.3 1.需求描述 在开发一个 SpringBoot 项目的时候&#xff0c;需要从 pom.xml 中获取配置的 artifactId&#xff0c;name&#xf…

vscode配置ssh远程连接服务器

注意&#xff1a;重启软件或重启电脑&#xff0c;解决很多问题 一. vscode配置ssh vscode通过ssh连接服务器&#xff08;吐血总结&#xff09;_vscode ssh-CSDN博客 二. VScode无法远程连接主机问题 VSCode远程连接服务器报错&#xff1a;Could not establish connection to…

paddleOcr记录

情况1&#xff1a;默认不需要标注电能表样本、训练电能表OCR模型&#xff0c;需调用PaddleOCR出识别字符&#xff0c;对识别信息进行提取 01 – >> test01.py 情况2&#xff1a;需要从无到有标注OCR样本&#xff0c;或已有样本及标签文件&#xff0c;需训练电能表OCR模型…