C#开发之同步异步的体验
来源:互联网 发布:徐州共享网络 编辑:程序博客网 时间:2024/05/22 06:52
同步异步的区别?
同步实现需要等待上一段程序执行完成后才能执行下一部分程序,是顺序执行。异步实际上是后台单独跑一个线程空闲时执行的,不影响其他程序的执行。
异步的应用场景
比如说。客户端程序一个保存包括很多语句的执行,需要花费几秒钟才能执行完成。如果程序等待执行完毕再做其他的操作,会直接给用户卡顿和性能慢的感觉,当然大家都知道其实就保存来讲同步异步基本上没有区别的。再比如,刷新数据时,数据量很大,.一般也会使用异步加载的方式完成,不然程序直接卡死了。
多线程与异步的关系
比如,穿衣服中先穿袜子再穿鞋就是同步执行,一边吃饭一边看电视就是异步执行;
3. Action Func有什么区别:
同步实现需要等待上一段程序执行完成后才能执行下一部分程序,是顺序执行。异步实际上是后台单独跑一个线程空闲时执行的,不影响其他程序的执行。
异步的应用场景
比如说。客户端程序一个保存包括很多语句的执行,需要花费几秒钟才能执行完成。如果程序等待执行完毕再做其他的操作,会直接给用户卡顿和性能慢的感觉,当然大家都知道其实就保存来讲同步异步基本上没有区别的。再比如,刷新数据时,数据量很大,.一般也会使用异步加载的方式完成,不然程序直接卡死了。
多线程与异步的关系
比如,穿衣服中先穿袜子再穿鞋就是同步执行,一边吃饭一边看电视就是异步执行;
多线程就是多个线程执行,不同的人干不用的事,就像公司的多个部门并行运行一样;
1. Action Func的常用的使用方法
(1)、Func委托有5个重载形式,区别仅在于它所指向的方法的签名的参数个数,分别如下:
Func<TResult>
Func<T,TResult>
Func<T1,T2,TResult>
Func<T1,T2,T3,TResult>
Func<T1,T2,T3,T4,TResult>
其中T,T1,..T4是委托指向的方法的参数的类型,TResult为方法的返回类型。
(2)、Action委托也有5个重载形式,分别如下:
Action
Action<T>
Action<T1,T2>
Action<T1,T2,T3>
Action<T1,T2,T3,T4>
其中T,T1,..T4是委托指向的方法的参数的类型。
2. 举例如下:
public static void HellowChinese(string strChinese){Console.WriteLine("Good morning," + strChinese);Console.ReadLine();}Action<string> action = HellowChinese;action("Spring.");Action<string> action2 = HellowChinese;action2.BeginInvoke("Winter", null, null);
public static string HelloEnglish(string strEnglish){return "Hello." + strEnglish;}Func<string, string> f = HelloEnglish;f("Srping ji");Func<string, string> f2 = HelloEnglish;f2.BeginInvoke("Srping ji",null, null);
3. Action Func有什么区别:
1. Func和Action委托的唯一区别在于Func要有返回值, Action没有返回值。
2. 项目程序中体会
//1. 异步打印日志Func<ItemInfo4Select, ItemRecordType, DeviceOperate, bool> cellLogFunc = _chestServices.InsertCellLog;cellLogFunc.BeginInvoke(CurrCellInfo, CurrItemRecordType, DeviceOperate.Save, null, null);//2. 同步更新,刷新UI时的处理,为了线程安全:if (currCanvas != null){ currCanvas.Dispatcher.Invoke(new Action(delegate { myDrawerLayout = new MyDrawerLayout(currCanvas, CurrDrawerInfo, CurrCellInfo.CellKey); myDrawerLayout.DataBind(); }));}//3. 异步更新有回调处理:Func<ItemRecordType, bool> saveTake = SaveItemRecord;saveTake.BeginInvoke(CurrItemRecordType, asyncResult =>{ var result = saveTake.EndInvoke(asyncResult); //Todo 根据返回结果做后续处理}, null);
0 0
- C#开发之同步异步的体验
- C#的新特性体验(异步方法的同步调用)
- C# 同步异步的区别
- C# 同步异步的区别
- C#大文件传输之SOCKET同步、异步、WCF同步、异步
- C#网络编程之同步异步
- C# Socket开发之异步
- C# Socket开发之同步
- C# 多线程同步与异步的实现
- C#异步调用和线程的同步
- C#委托的同步调用、异步调用、异步回调
- C# 同步异步方法
- C#同步异步
- C#开发之WebService一些体验
- 软件开发中同步、异步的概念
- C#异步编程初体验
- C#学习之(二)同步调用与异步调用
- FPGA开发技巧之同步复位与异步复位的理解
- POJ 1001 Exponentiation
- gradle eclipse插件官方下载地址
- 没什么不同,献给即将走向未来的自己
- Linux 的硬链接与软链接(转)
- 使用位运算或使用
- C#开发之同步异步的体验
- 单一主机条件下根据域名跳转到逻辑意义上的不同web应用
- poj 1414
- 光荣之路测试教程
- 纵综宗纂祝仔酌纵姿紫祖奏坐姿族灼转孜
- C++笔记 The IO Library
- 纂组纵转茁钻坐资诅啄谞酌捉赚注纂奏篆
- 【深入浅出IOS开发】彩票-重写按钮控件
- 1038. Recover the Smallest Number