C#~异步编程
.net frameworks5.0主推的就是异步编程APM,它事实上不是新的东西,而是微软将之前的线程等概念的进行的一次封装,提出了await,async等关键字,引用了Task类,也大大简化了APM的开发,下面我们将通过一个具体的例子来介绍一下APM的使用场合。
实例说明
有一个面向WEB的API接口,在我们项目中需要用到,这个API主要功能是向其它项目发通知,如一个用户点了回复帖子,可能伴随着一个通知的产生,而这个通知可能是PHP端需要体现的,这样,这种跨网络,跨平台的接口API就出现了,而在进行通讯过程中,网络是不可控的,它的响应速度是不可预知的,所以,这种通知功能,应该使用我们的异步编程来实现(APM,不是XMLHTTPRequest)。
知识点
异步方法:提供了一种简便方式完成可能需要长时间运行的工作,而不必阻止调用方的线程。 异步方法的调用方可以继续工作,而不必等待异步方法完成。
await:运算符应用于一个异步方法的任务挂起方法的执行,直到等待任务完成。 任务表示正在进行的工作。 await 表达式不阻止它在其上执行的线程。
async: async 修饰符指示方法、它进行修改 lambda 表达式或 匿名方法 是异步的
Task类:它表示一个任务,在.net4.5版本开始被支持, 它隶属于 System.Threading.Tasks命名空间下;通过Task类可以方便的开启一个新的线程。
代码展现
异步代码:
/// <summary> /// 异步方法,解决长等待问题 /// </summary> /// <param name="action"></param> /// <param name="entity"></param> /// <returns></returns> public async Task AsyncAdd(Func<FAQ_Info, VMessage> fun, FAQ_Info entity) { return System.Threading.Tasks.Task.Run(() => //解决UI阻塞,这种并不是真正的并行执行,而是开了一个新线程异步执行代码段,
//主UI不会等待它返回结果的,如果要与主线程合作开发,即并行开发,需要加await来获取Task的返回结果 { fun(entity); }); }
调用代码:
var repository = new NoticeInfoService(); repository.AsyncAdd((a) => { return repository.TeacherReplyFAQ(a); }, faqInfo);
使用技巧:使用了Func委托,来统一某种类型的实现,它减少了重复代码量。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2012-06-16 爱上MVC3系列~使用视图模型的好处及与数据模型之间的赋值问题
2011-06-16 多层架构的调用方式(方法回调)
2011-06-16 刚写完的一个用户遍历更新的SQL存储过程,分享一下吧