『7x24小时有问必答』
1.png
一、同步执行(Synchronous)
同步执行就是:
代码按顺序一行一行执行,前面的没完成,后面的不会执行。
常见方式
1 普通方法调用
最基础的同步执行。
void  Task1(){      Console.WriteLine("任务1开始");      Thread.Sleep(2000);      Console.WriteLine("任务1结束");}void  Task2(){      Console.WriteLine("任务2开始");}static  void  Main(){      Task1();      Task2();}
执行顺序:
{任务1开始等待2秒任务1结束任务2开始}
2 Thread.Sleep()
同步阻塞线程。
Thread.Sleep(2000);
特点:
当前线程完全阻塞
CPU不会做别的事情
常用于:
PLC 通讯延时
简单节拍等待
3 Thread.Join()
等待线程执行完成(同步等待)
Thread  t  =  new  Thread(Task1);t.Start();t.Join();     //等待线程结束Task2();
二、异步执行(Asynchronous)
异步执行就是:
任务启动后,不阻塞当前线程,可以同时执行别的任务。
1 Task(最常用)
Task.Run(() =>{       Console.WriteLine("异步任务执行");});
示例:
static  void  Main(){      Task.Run(() =>      {            Console.WriteLine("任务1");            Thread.Sleep(2000);      });      Console.WriteLine("任务2");}
可能输出:
任务2任务1
说明:
任务1在后台线程执行。
2 async / await(现代C标准
最推荐使用方式。
示例:
async  Task  Task1(){      Console.WriteLine("任务开始");       await  Task.Delay(2000);      Console.WriteLine("任务结束");}
调用:
await  Task1();
特点:
async 声明异步函数
await 等待任务完成
不会阻塞线程
3 Task.Delay()
异步等待
await  Task.Delay(2000);
区别:
方法
是否阻塞
Thread.Sleep
阻塞线程
Task.Delay
不阻塞线程
三、Thread(传统多线程)
老式方法,现在用得少。
Thread  t =  new  Thread(() =>{       Console.WriteLine("线程执行");});t.Start();
缺点:
管理复杂,线程开销大,现代一般用 Task 替代。
四、同步 vs 异步总结
类型
关键字/方法
特点
同步
  普通函数调用
顺序执行
同步
Thread.Sleep()
阻塞线程
同步
Thread.Join()  
等待线程结束
异步
Task.Run()  
后台任务
异步
async  
声明异步方法
异步
await  
等待异步任务
异步
Task.Delay()  
非阻塞等待
异步  
Thread.Start()
传统多线程
五、工程中最常见写法
同步
ReadPLC();ProcessData();WritePLC();
异步
await  ReadPLCAsync();await  ProcessDataAsync();await  WritePLCAsync();
六、工业控制中的典型使用
同步
适合:
PLC控制流程/设备顺序控制/机械动作流程
例:夹紧 → 吸真空 → 检测 → 放料
异步
适合:
上位机通讯/UI不卡死/数据采集/网络通讯
例如:
PLC通讯/相机采集/数据库写入/可以同时进行。

---

往期热门文章:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码