C#里的多线程,一网打尽thread,task,parallel
2023-09-11 14:13:57 时间
C#里的多线程,一网打尽
1.Sync await
2.Thread
3.Threadpool
4.Task
5.Parallel
1.控制线程数量为3,卡界面
ParallelOptions options =new ParalelOptons();
options.MaxDEGREEOfParallelism=3;
Parallel.For(0,10,options,i=>this.Dosomething()); //控制线程数量为3
pageDataList.AsParallel()
.WithDegreeOfParallelism(3) //控制线程数量为3
.ForAll(m =>
2. 不控制线程数量
Parallel.For(0,10,i=>this.Dosomething()); //不控制线程数量
3.控制线程数量为3,不卡界面,主线程不参入计算
Task.Run(()=>{
ParallelOptions options =new ParalelOptons();
options.MaxDEGREEOfParallelism=3;
Parallel.For(0,10,options,i=>this.Dosomething()); //控制线程数量为3,不卡界面,主线程不参入计算
}
4.抓取异常
List<Task> taskList=new List<Task>();
for(int i=0;i<0;i++){
taskList.Add(Task.Run(()=>
{
//dosomething Thread.CurrentThread.ManagedThreadId.ToString("00")
}
}
Task.WaitAll(taskList.ToArray());
5. 线程停止,当有一个线程有异常,停止所有的线程,全局变量isok
CancellationTokenSource cts=new CancellationTokenSource ();
Task.Run(()=>{
if(! cts.IsCancellationRequested)
{
//dosomething
}else{
throw new AggregateException(); //停止了线程
//失败了
}
}
多线程
1.多线程的定义,并行(多个cpu同时执行),并发(CPU分片执行交并发)
2.多线程的执行顺序控制:回调,iscomplate等待,waitOne等待,EndInvoke
3.线程api使用
Thread thread=new Thread(method);
thread.Start(); 开启线程,执行委托的内容
thread.Suspend();
4.线程定制扩展--回调
5.线程池:不用反复创建和销毁代价高,用一个池子保存对象,节约资源,防止滥用不可控
6.线程销毁:Abort() 方法用于销毁线程
Task task=new Task(()=>{
});
task.Start();
Task task =Task.Run(()=>{
};
TaskFactory taskf=new taskFactory();
TaskFactory taskf=Task.Facotry;
taskf.StartNew();
1.控制线程数量为3,卡界面ParallelOptions options =new ParalelOptons();options.MaxDEGREEOfParallelism=3;
Parallel.For(0,10,options,i=>this.Dosomething()); //控制线程数量为3
2. 不控制线程数量Parallel.For(0,10,i=>this.Dosomething()); //不控制线程数量
3.控制线程数量为3,不卡界面,主线程不参入计算Task.Run(()=>{
ParallelOptions options =new ParalelOptons();options.MaxDEGREEOfParallelism=3;Parallel.For(0,10,options,i=>this.Dosomething()); //控制线程数量为3,不卡界面,主线程不参入计算}
4.抓取异常
List<Task> taskList=new List<Task>();for(int i=0;i<0;i++){ taskList.Add(Task.Run(()=> { //dosomething Thread.CurrentThread.ManagedThreadId.ToString("00") }}Task.WaitAll(taskList.ToArray());
5. 线程停止,当有一个线程有异常,停止所有的线程,全局变量isok CancellationTokenSource cts=new CancellationTokenSource (); Task.Run(()=>{
if(! cts.IsCancellationRequested) { //dosomething }else{ throw new AggregateException(); //停止了线程 //失败了 }}
相关文章
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
- Task C# 多线程和异步模型 TPL模型 【C#】43. TPL基础——Task初步 22 C# 第十八章 TPL 并行编程 TPL 和传统 .NET 异步编程一 Task.Delay() 和 Thread.Sleep() 区别
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
- C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能
- c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件
- C#【多线程篇】AutoResetEvent和ManualResetEvent的区别
- C#【多线程篇】模拟网络通信定时心跳检测连接状态(AutoResetEvent)
- C#【多线程篇】Parallel.For和for的效率比较(Paralle.Foreach和foreach比较类似)
- C#【中级篇】Winform中Application.DoEvents的使用
- 《C#多线程编程实战(原书第2版)》——2.5 使用AutoResetEvent类
- 《C#多线程编程实战(原书第2版)》——2.6 使用ManualResetEventSlim类
- c# 多线程 调用带参数函数
- C#拼接SQL中in条件
- C#多线程之Thread,ThreadPool,Task,Parallel
- 《敏捷软件开发:原则、模式与实践(C#版.修订版)》一1.4 参考文献
- C#多线程编程
- C# 匿名方法和Lambda表达式
- C# 多线程之List的线程安全问题
- C# 多线程学习系列四之ThreadPool取消、超时子线程操作以及ManualResetEvent和AutoResetEvent信号量的使用
- C# 多线程学习系列二
- C#-How to get series point info when mouse is over chartcontrol
- C# 多线程九之Timer类
- C# winForm 多条件模糊查询实现(主要讲思路,请忽略与数据库(sqlite)相关的代码)
- C# Winform 自动更新程序实例
- C#多线程中的异常处理