zoukankan      html  css  js  c++  java
  • .NET通过async/await实现并行

    如果可以并行可以大大提高性能,但在我们的使用中,不可能全是并行的也是要有线行操作,所以我们需要在业务逻辑层进行并行操作的护展:

    数据访问层不变还是以前一样如下:

        public class UserDAL
        {
            public User GetUser()
            {
                User user = new User();
                user.Name = "N1";
                user.Address = "A1";
                return user;
            }
    
            public List<User> GetUserList()
            {
                List<User> list = new List<User>();
                list.Add(new User { Name = "N11", Address = "A11" });
                list.Add(new User { Name = "N12", Address = "A12" });
                return list;
            }
        }

    业务逻辑层需要护展有async,如下:

        public class UserBLL
        {
            UserDAL dal = new UserDAL();
            public async Task<User> GetUserAsync()
            {
                return await Task.Run(() => { return dal.GetUser(); });
            }
    
            public User GetUser()
            {
                return dal.GetUser();
            }
    
            public async Task<List<User>> GetUserListAsync()
            {
                return await Task.Run(() => { return dal.GetUserList(); });
            }
    
            public List<User> GetUserList()
            {
                return dal.GetUserList();
            }
        }

    最后是调用了,如下:

            UserBLL userBLL = new UserBLL();
            public async Task<ActionResult> Index()
            {
    
                var user = userBLL.GetUserAsync();
                var listUser = userBLL.GetUserListAsync();
    
                int t1 = Environment.TickCount;
    
                await Task.WhenAll(user, listUser);
                ViewBag.User = user.Result;
                ViewBag.ListUser = listUser.Result;

            //ViewBag.User = await user;
            //ViewBag.ListUser = await listUser;

                ViewBag.Times = Environment.TickCount - t1;
                return View();
            }

    具体的性能我们可以测试,在数据访问层每次延时500毫秒,用并行和线行测试一下,并行大约时间在500毫秒左右,而线行则在1000毫秒左右

    以上参考dudu 实际案例:在现有代码中通过async/await实现并行  http://www.cnblogs.com/dudu/p/async_await_parallel.html

  • 相关阅读:
    V2热帖:要多健壮的代码才能支撑起千变万化的需求?
    jmeter生成html报告的命令
    jmeter5.x&4.x搭配使用Serveragent 监听服务端性能参数
    springboot关于tomcat的几个默认配置
    nginx日志统计分析-shell
    OpenStack虚拟机VIP配置步骤
    openstack 3.14.3 虚拟机增加指定IP网卡
    OpenStack各组件的常用命令
    Filebeat的Registry文件解读
    一个shell脚本的实践
  • 原文地址:https://www.cnblogs.com/hantianwei/p/4160105.html
Copyright © 2011-2022 走看看