C#开发之同步异步的体验

来源:互联网 发布:徐州共享网络 编辑:程序博客网 时间:2024/05/22 06:52
同步异步的区别?
同步实现需要等待上一段程序执行完成后才能执行下一部分程序,是顺序执行。异步实际上是后台单独跑一个线程空闲时执行的,不影响其他程序的执行。

异步的应用场景
比如说。客户端程序一个保存包括很多语句的执行,需要花费几秒钟才能执行完成。如果程序等待执行完毕再做其他的操作,会直接给用户卡顿和性能慢的感觉,当然大家都知道其实就保存来讲同步异步基本上没有区别的。再比如,刷新数据时,数据量很大,.一般也会使用异步加载的方式完成,不然程序直接卡死了。

多线程与异步的关系
比如,穿衣服中先穿袜子再穿鞋就是同步执行,一边吃饭一边看电视就是异步执行;

多线程就是多个线程执行,不同的人干不用的事,就像公司的多个部门并行运行一样;

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
原创粉丝点击