Parallel.Foreach 用于调用和使用多个函数
Parallel.Foreach for calling and consuming multiple function
我想为下面的代码片段做一个 Parallel.ForEach(... ),但是因为有两个函数调用 - 两者应该发生在同一个块中,因为第二个函数正在消耗值由第一个函数返回。我不知道该由谁来实现。基本上我想将下面的内容转换成 Parallel.ForEach(...)。提前致谢。
List<Employee> employeeList = GetEmployees();
foreach (var emp in employeeList)
{
var empDetails = GetEmpDetails(emp.EmployeeId);
ProcessEmployeeDetails(empDetails);
}
我已经尝试了下面的方法,它不起作用:
Parallel.ForEach(employeeList, emp =>
{
var empDetails = GetEmpDetails(emp.EmployeeId);
ProcessEmployeeDetails(empDetails);
});
您似乎在幕后使用 EF 连接,并且似乎不是为此而设计的,并且执行多个数据检索是在同一个命令上执行的。您可以阅读更多相关信息 here。它也有解决方案:启用 MARS。
据我所知,Parallel.ForEach 没有问题,但一些基础内容的问题是 运行 开箱即用无法并行处理的。
P.S。更清楚一点:循环体内的两个函数将 运行 在同一个线程上。
我想为下面的代码片段做一个 Parallel.ForEach(... ),但是因为有两个函数调用 - 两者应该发生在同一个块中,因为第二个函数正在消耗值由第一个函数返回。我不知道该由谁来实现。基本上我想将下面的内容转换成 Parallel.ForEach(...)。提前致谢。
List<Employee> employeeList = GetEmployees();
foreach (var emp in employeeList)
{
var empDetails = GetEmpDetails(emp.EmployeeId);
ProcessEmployeeDetails(empDetails);
}
我已经尝试了下面的方法,它不起作用:
Parallel.ForEach(employeeList, emp =>
{
var empDetails = GetEmpDetails(emp.EmployeeId);
ProcessEmployeeDetails(empDetails);
});
您似乎在幕后使用 EF 连接,并且似乎不是为此而设计的,并且执行多个数据检索是在同一个命令上执行的。您可以阅读更多相关信息 here。它也有解决方案:启用 MARS。
据我所知,Parallel.ForEach 没有问题,但一些基础内容的问题是 运行 开箱即用无法并行处理的。
P.S。更清楚一点:循环体内的两个函数将 运行 在同一个线程上。