2

기본적으로 원시 sql을 사용하고 실행하고 특정 형식으로 내 보낸 다음이를 압축하여 파일 공유에 게시하는 응용 프로그램에서 작업하고 있습니다.내부 Parallel.For 또는 Task 사용 여부 결정

각 보고서는 다음과 관련이 없으며 응용 프로그램을 호스팅하는 서버 시스템이 충분한 마력을 갖기 때문에 태스크 라이브러리를 활용하고 싶습니다. 데이터를 수출하는 ReportWorker 클래스 내에서 일어나는 마지막 처리 단계의

  Parallel.ForEach(DataAccessFactory().GetPendingReportRequests(), req => 
      { 
       ILogger log = Log.ForContext("Report ID", req.Id); 
       try 
       { 
        log.Information("Starting Work"); 
        new ReportWorker(DataAccessFactory(), ZipPackageFactory(), FileSystemFactory()).Run(req); 
       } 
       catch (Exception ex) 
       { 
        log.Error(ex.Message); 
       } 
       finally 
       { 
        log.Information("Ending Work"); 
       } 
      } 
     ); 

하나를 나는 그들이 잠재적 별도의 스레드에서 처리 할 수 ​​있도록 보고서 요청의 내 컬렉션을 통해 열거 할 Parallel.For를 사용하여 생각하고 있었는데 엑셀 (또는 CSV), 각 zip 파일 압축, 마지막으로 파일을 클라우드의 제거 공유에 복사합니다. 이것은 길이 프로세스가 될 수 있고 내가 다른 Parallel.For (각 파일에 대해) 또는 작업을 사용해야 사용할 경우 궁금 해서요. 나는 아직 Task 객체를 사용하는 것에 익숙하지 않다.

도움을 주시면 감사하겠습니다.

+0

는 주제의 조금있을 수 있지만 대역폭이 가장 가능성이 병목이 될 것이기 때문에 당신이 1 개 또는 10 스레드를 사용하여 데이터를 업로드하면, 그것은 중요하지 않습니다. 따라서 보고서를 병렬로 처리 한 다음 다른 곳에서 업로드하여 업로드 할 수 있습니다. 이것은 또한 오류 처리를 더 쉽게 만들어야합니다 (연결이 끊어진 상태 등) –

+0

좋은 생각입니다. 내가 동일한 프로세스 내에서 유지하는 이유는 모든 파일이 성공적으로 업로드 될 때까지 데이터베이스를 "완료"상태로 업데이트하지 않기 때문입니다. – Marco

답변