C#基础10
分线程通常指的是如何开启一个独立于主程序主线程之外的执行流让程序能够“一心二用”。比如主界面保持流畅响应用户点击而后台线程在默默下载大文件或处理复杂计算。从最基础的底层实现到现代的高级写法1、基础方式:使用Thread类这是最直观的“分线程”方式直接对应操作系统层面的线程。特点你需要手动管理线程的生命周期创建、启动、停止.使用场景需要长时间运行、且需要精细控制线程属性如优先级、前台/后台的任务。using System;using System.Threading;class Program{static void Main(){// 1. 创建线程指定要执行的方法Thread newThread new Thread(DoWork);// 设置为后台线程主程序退出时该线程也会自动结束newThread.IsBackground true;// 2. 启动线程 newThread.Start();Console.WriteLine(主线程继续执行不被阻塞...);}static void DoWork(){// 这里是在分线程中执行的代码for (int i 0; i 5; i){Console.WriteLine($分线程工作中... {i});Thread.Sleep(500); // 模拟耗时操作}}}现代推荐方式使用Task任务并行库这是目前.NET开发中的标准做法。它不直接创建线程而是利用线程池ThreadPool来复用线程效率更高。特点轻量级自动管理线程资源支持返回结果。适用场景绝大多数后台计算任务。using System;using System.Threading.Tasks;class Program{static void Main(){// 使用 Task.Run 将工作推送到线程池Task.Run(() {// 这里的代码在分线程线程池线程中运行LongRunningCalculation();});Console.WriteLine(主线程立即返回继续处理其他事情...);Console.ReadLine();}static void LongRunningCalculation(){// 模拟耗时计算 Task.Delay(2000).Wait();Console.WriteLine(计算完成);}}异步方式async/await如果你希望分线程的任务完成后能“通知”主线程继续做某事例如下载完成后更新界面使用这种方式最优雅。特点代码写起来像同步代码不会阻塞界面UI线程。使用场景I/O操作文件读写、网络请求或需要等待任务结果的场景。using System;using System.Threading.Tasks;class Program{static async Task Main(){Console.WriteLine(开始任务...);// await 会等待任务完成但不会卡死主线程await Task.Run(() {// 模拟耗时工作Thread.Sleep(2000);});Console.WriteLine(任务完成继续后续操作);}}方式核心类优点缺点底层线程System.Threading.Thread控制力最强可设置优先级资源开销大创建销毁慢任务并行System.Threading.Tasks.Task性能高利用线程池代码简洁无法直接控制具体线程属性异步编程async/await极大提升代码可读性UI不卡顿需要理解状态机原理给新手的特别提示不要“卡死”线程池在使用Task.Run或线程池时千万不要在里面使用Thread.Sleep()来模拟长时间等待。这会占用宝贵的线程池资源。如果是等待请使用Task.Delay()。线程安全问题一旦开启分线程如果多个线程同时修改同一个变量比如全局计数器数据就会乱掉。这时你需要使用lock关键字来加锁保护。前台与后台默认创建的Thread是前台线程它会阻止程序关闭。如果你想让程序关闭时分线程也跟着自动结束记得设置thread.IsBackground true。你可以先尝试用Task.Run写一个简单的分线程程序这是目前最通用的做法。如果有具体的代码需求随时发给我
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2593990.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!