【问题标题】:will Task.Run() make any difference in performance?Task.Run() 会对性能产生任何影响吗?
【发布时间】:2013-08-04 00:56:42
【问题描述】:

我有一个调用数据库的方法,如下所示:

BL方法调用DAO方法:

    public async Task<List<Classes>> GetClassesAndAddRules(string classId)
    {
        var classData = await Task.Run( () => _daoClass.GetClasses(classId));

        //logic for adding rule
        //..................................
    }

DAO 中的数据库调用:

   //*below method takes 1 second approx to return*
    public List<Classes> GetClasses(string id)
    {
        var retVal = new List<Classes>();

        using (var context = new test_db_context())
        {
            var rows = context.GetClassesById(id);
            foreach (ClassesDBComplexType row in rows)
            {
                retVal.Add(Mapper.Map<GetClassesByClassIdOut>(row));
            }
        }
        return retVal;
    }

仅使用 await 调用 DAO 方法是否有任何性能提升?

我的理解是 GetClasses() 将在单独的线程上调用,这样它就不会阻塞并继续处理其他东西。

感谢任何帮助。

【问题讨论】:

    标签: c# asp.net-mvc-4 task-parallel-library async-await c#-5.0


    【解决方案1】:

    您发布的代码无法编译。从您的问题标题来看,我假设您的电话实际上看起来像 await Task.Run(() =&gt; _daoClass.GetClasses(classId));

    在这种情况下,使用Task.Run在性能上有所不同:会更糟。

    async 在服务器端的作用是释放请求线程,而不是阻塞它。您对await Task.Run(...) 所做的是通过在另一个线程上开始工作来释放请求线程。换句话说,Task.Run 代码有相同数量的工作来完成加上线程编组。

    【讨论】:

    • 嗨斯蒂芬,我已经更新了帖子。感谢您指出代码中的错误。您能否建议我如何才能真正实现数据库调用的异步或并行处理?就我而言,数据库调用非常昂贵,因为获取数据大约需要 1 秒。
    • @SanjaySutar:花费的时间无关紧要。您应该直接调用它:var classData = _daoClass.GetClasses(classId);。如果将其包装在 Task.Runawait 中,仍然需要 1 秒...
    • 你是绝对正确的。但是应该有一些方法使它异步。我不想将线程阻塞 1 秒,因为同一线程可以用于其他事情。大多数博客都提到了这一点。
    • 大多数关于 async 的非 Microsoft 信息都假定为 UI 应用程序(例如 WinForms、WPF 等)。这是在服务器端(ASP.NET MVC)。在 UI 应用程序中,这是有道理的,因为您通过将工作推送到线程池线程来释放 UI 线程(稀缺且重要的资源)。在服务器端,这个论点没有意义,因为您通过将工作推送到另一个线程池线程来释放一个线程池线程。所以你什么也得不到。
    • 对我来说很有意义...如何让它像 Stephen Toub 提到的那样异步:blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2017-06-12
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多