asp.net c#並行調用service層代碼

        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

相關文章
相關標籤/搜索