将Task.Run()在性能上产生任何差异
本文关键字:任何差 性能 Task Run | 更新日期: 2023-09-27 18:26:05
我有一个调用数据库的方法,如下所示:
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;
}
仅仅通过使用等待调用DAO方法,是否有任何性能提升?
我的理解是GetClasses()将在一个单独的线程上调用,这样它就不会阻塞并继续处理其他东西。
感谢您的帮助。
您发布的代码不会编译。从你问题的标题来看,我假设你的电话实际上看起来像await Task.Run(() => _daoClass.GetClasses(classId));
在这种情况下,Task.Run
的使用将对性能产生影响:性能会更差。
async
在服务器端的作用是释放请求线程,而不是阻止它。您使用await Task.Run(...)
所做的是通过启动另一个线程来释放请求线程。换句话说,Task.Run
代码要做的工作量与加上线程封送处理的工作量相同。