標題的名稱定義不知道是否準確,不過我想表達的意思就是使用Task特性來同時請求多個不同的接口,然后合并數(shù)據(jù);我想這種場景的開發(fā)對于對接過其他公司接口的人不會陌生,本人也是列屬于之內(nèi),更多的是使用最原始的異步委托的方法去處理,今天抽空寫了一個使用4.5新特性Task來處理這種場景;各位看客有什么疑問或者好的建議及分享請博客通知,謝謝。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:主機域名、虛擬主機、營銷軟件、網(wǎng)站建設、三門峽網(wǎng)站維護、網(wǎng)站推廣。
A.項目結(jié)構(gòu)圖
B.namespace Pm.V.PM_BLL下面的BaseClass定義如下:
View Code
主要是在實例的時候讀取各個業(yè)務模塊的配置文件,初始化一些常用并且是公共的屬性信息;其次創(chuàng)建了一個虛方法_GetArticles,注意里面的參數(shù)是object這個將再后面的時候重提;
C.下面就是請求第三方業(yè)務實現(xiàn)類的代碼,這里測試的時候分別使用
1.CnblogsClass類抓取博客園首頁的博客列表信息
View Code
.注意這里使用 : base("")直接繼承了上面說的父類的方法,來初始化配置信息(當然這個可能不算知識點)
.接下來就是實現(xiàn)的_GetArticles方法里面PublicClass._HttpGet方法封裝的HttpClient獲取博客園的數(shù)據(jù)
.解析了返回的數(shù)據(jù)信息(這里使用的正則,可能有些同學覺得正則可能還不太熟悉,可以自行百度參考分析下)
.記錄日志,我這里是記錄的文本日志暫時注釋了,因為怕抓取的信息多,忘記刪除占用空間
以上幾點就是實際情況中經(jīng)常遇到的步奏,這個處理步奏在從來沒有對接過第三方接口的人還是值得學習的
2.HuJiangClass類是抓取了博客園中.Net第一頁的數(shù)據(jù),步奏和方法和上面相同,請關注代碼部分
View Code
D.今天要講的主要內(nèi)容來了,以上算是過度,讓人了解對接第三方接口的一些處理步奏和簡單的封裝吧;這里將看到的是Pm.Api.Controllers空間下BlogsController里面的Post方法,代碼如:
View Code
1.首先使用了var baseRequest = Newtonsoft.Json.JsonConvert.DeserializeObject
2.常用的接口形式使用參數(shù)節(jié)點名稱來確定將要執(zhí)行的方法,或者直接在節(jié)點值中標注方法的名稱,因此有了這么一句switch (baseRequest.FunName)來判斷程序的走向
3.在此反序列得到真實調(diào)用者post給接口的數(shù)據(jù)(上面第一次反序列使用的是基類,基類里面就包含了驗證需要的屬性,為什么這里不直接使用第一次反序列的對象呢,因為這里將要傳遞給后面方法參數(shù)的值是子類里面封裝的)
4.開始定義Task任務的數(shù)量,一般根據(jù)有幾個第三方接口第一幾個吧,Task
5.Task.Factory.StartNew
6.Task.WaitAll(tasks, 1000 * 1 * 30);這個WaitAll是自帶的,意思是等待任務執(zhí)行多少毫秒,也算是知識點吧,第一個參數(shù)是任務數(shù)組,是數(shù)組的形式,第二個是毫秒單位的等待時間
7.最后通過foreach (var task in tasks) 來循環(huán)整合task.Result返回的結(jié)果
之后是效果截圖DataType表示不同的數(shù)據(jù)來源:
大致就是這些吧,不知道說的東西是否說明白了,這就是處理對接第三方不同接口的業(yè)務邏輯,也是使用task來并行處理的方法