2016-10-28 7 views
0

두 개의 함수 호출이 있기 때문에 아래 코드 스 니펫에 대해 Parallel.ForEach (...)를 수행하려고합니다. 두 함수 호출이 같은 블록에서 발생해야합니다 funtion은 첫 번째 함수에서 반환 된 값을 소비합니다. 나는 이것을 누구에게 줄 것인지 모른다. 기본적으로 아래를 Parallel.ForEach (...)로 변환하고 싶습니다. 미리 감사드립니다.Parallel.Foreach 여러 함수 호출 및 사용

  Parallel.ForEach(employeeList, emp => 
      { 
       var empDetails = GetEmpDetails(emp.EmployeeId); 

       ProcessEmployeeDetails(empDetails); 

      }); 
+0

작동하지 않는 것은 무엇입니까? 무슨 일이야? 당신은'GetEmpDetails'와'ProcessEmployeeDetails'에 대해 자세히 설명 할 수 있습니까? –

+0

이 방법 중 하나에서 일반적인 상태를 수정하고 있습니까? 그런 다음 문제는 Parallel.ForEach가 아니라 이론적으로 병렬로 실행하는 것이 가능합니다. –

+0

GetEmpDetails (emp.EmployeeId) 및 ProcessEmployeeDetails (empDetails)는 공통 상태를 수정하지 않으므로 detials r이 GetEmpDetails (emp.EmployeeId)에서 반환되면 ProcessEmployeeDetails (empDetails)는 세부 정보를 저장하고 세부 사항을 저장하는 작업을 수행합니다. 새 테이블. – saklo

답변

0

당신이 뒤에서 EF 연결을 사용하는 것으로 보인다 그리고이 설계되어야하는 것 여러 데이터를 실행하지 않습니다

 List<Employee> employeeList = GetEmployees(); 

     foreach (var emp in employeeList) 
      { 
       var empDetails = GetEmpDetails(emp.EmployeeId); 

       ProcessEmployeeDetails(empDetails); 
      } 

나는 이미 작동하지 않습니다, 아래 시도 검색은 동일한 명령에서 실행됩니다. 자세한 내용은 here을 참조하십시오. MARS를 가능하게하는 해결책도 있습니다.

Parallel.ForEach에는 아무런 문제가 없지만 병렬 처리가 불가능한 기본 문제가 있습니다.

P. 좀 더 명확히하기 위해서 : 루프의 몸체 안에있는 두개의 함수가 같은 스레드에서 돌아갈 것입니다.

+0

예 ... 저는 Linq to Entity를 사용하고 있습니다. 당신의 도움을 주셔서 감사합니다. – saklo

+0

문제가되지 않습니다. MARS를 사용하도록 설정하거나 문제가 해결되지 않으면 다른 해결책을 찾아보십시오. 병렬 스레드에서 수행하는 작업에주의를 기울여 보호되지 않은 리소스를 편집하거나 다중 스레드를 지원하도록 설계되지 않은 다른 라이브러리를 사용하지 않도록주의해야합니다. –

+0

이 도움이됩니다. 다시 도움을 주셔서 감사합니다. 매우 감사. – saklo