public ActionResult Home(AdviserSearchModel model) { //顧問列表須要的當前城市的下級地區 var ip = "117.82.196.195"; var districts = this.districtService.GetDistrictByIp(ip); //顧問列表分頁數據 model.OperatorType = AdviserEnum.FurnitureAdviser; var result = this.adviserService.GetPagingData(model); return Json(result, JsonRequestBehavior.AllowGet); }
個人代碼一開始是上面這種寫法,只有等待第一個服務執行完,纔會執行第二個服務。多線程
由於兩次調用service代碼都比較耗時,後來想到用多線程。也就是.net爲咱們封裝好的Task類。字體
修改以下:this
public ActionResult Design(AdviserSearchModel model) { //顧問列表須要的當前城市的下級地區 var ip = "117.82.196.195"; var districtsTask = Task.Run(() => { return this.districtService.GetDistrictByIp(ip); }); //顧問列表分頁數據 model.OperatorType = AdviserEnum.DesignAdviser; var pagingTask = Task.Run(()=> { return this.adviserService.GetPagingData(model); }); var districts = districtsTask.Result; var result = pagingTask.Result; return Json(result, JsonRequestBehavior.AllowGet); }
紅色字體上面的代碼把任務加到線程裏面,不阻塞當前線程。只有在走到紅色字體的時候,纔會阻塞線程,等待CPU執行任務結束,獲取線程的執行結果。紅色的兩行代碼是並行執行的。個人電腦是4核的,因此我相信耗時,應該是那個消耗較長的服務的時間。spa