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

本文详细解释了同步与异步的概念及区别,通过具体例子说明了它们的应用场景,并探讨了多线程与异步的关系,最后介绍了Func和Action委托的用法及区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同步异步的区别?
同步实现需要等待上一段程序执行完成后才能执行下一部分程序,是顺序执行。异步实际上是后台单独跑一个线程空闲时执行的,不影响其他程序的执行。

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

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

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

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);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值