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

  • 相关阅读:
    从尾到头打印链表(基于js)
    替换空格(基于js)
    二维数组的查找(基于js)
    关于document对象
    js之DOM操作总结
    将博客搬至CSDN
    关于js中的数组
    干货集中营
    vim编辑器学习记录
    python3 多线程爆破ftp、mysql、ssh
  • 原文地址:https://www.cnblogs.com/hantianwei/p/4160105.html
Copyright © 2011-2022 走看看