zoukankan      html  css  js  c++  java
  • 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类。

    修改如下:

            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核的,所以我相信耗时,应该是那个消耗较长的服务的时间。

  • 相关阅读:
    shell 中的expect 用法
    Python下安装protobuf
    google protobuf 中的proto文件编写规则
    ubuntu 16.04 安装grpc
    python 常见的错误类型 和 继承关系
    倒排索引
    python 调用c函数
    python中的re模块,常用函数介绍
    leecode第二十二题(括号生成)
    leecode第十九题(删除链表的倒数第N个节点)
  • 原文地址:https://www.cnblogs.com/subendong/p/10508914.html
Copyright © 2011-2022 走看看