3

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

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() 将在一个单独的线程上调用,这样它就不会阻塞并继续处理其他东西。

任何帮助表示赞赏。

4

1 回答 1

6

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

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

async服务器端的重点是释放请求线程而不是阻塞它。您正在做的是通过在另一个线程上开始工作await Task.Run(...)来释放请求线程。换句话说,代码有相同数量的工作要做加上线程封送处理。Task.Run

于 2013-08-04T05:26:32.587 回答