zoukankan      html  css  js  c++  java
  • 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委托,来统一某种类型的实现,它减少了重复代码量。

    返回目录

  • 相关阅读:
    解决UITableView中Cell重用机制导致内容出错的方法总结
    Hdu 1052 Tian Ji -- The Horse Racing
    Hdu 1009 FatMouse' Trade
    hdu 2037 今年暑假不AC
    hdu 1559 最大子矩阵
    hdu 1004 Let the Balloon Rise
    Hdu 1214 圆桌会议
    Hdu 1081 To The Max
    Hdu 2845 Beans
    Hdu 2955 Robberies 0/1背包
  • 原文地址:https://www.cnblogs.com/lori/p/3790761.html
Copyright © 2011-2022 走看看