程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#~異步編程

C#~異步編程

編輯: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<VMessage> AsyncAdd(Func<FAQ_Info, VMessage> fun, FAQ_Info entity)
        {
            return await System.Threading.Tasks.Task.Run(() =>
            {
                return fun(entity);
            });
        }

調用代碼:

       var repository = new NoticeInfoService();
       repository.AsyncAdd((a) => { return repository.TeacherReplyFAQ(a); }, faqInfo);

使用技巧:使用了Func委托,來統一某種類型的實現,它減少了重復代碼量。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved