테이블에 약 3 백만 행이 있습니다. 모든 행을 가져 와서 해당 행을 처리하는 콘솔 응용 프로그램이 있습니다. 한 번에 1000 개의 행을 가져오고 내 처리 논리를 실행하기 위해 TPL을 사용하고 싶습니다. 다음과 같은 논리를 가질 수 있습니다. ProcessRowsForPage 메서드 내에서 페이지 번호를 기반으로 레코드를 가져옵니다.C#을 사용하여 SQL에서 행 가져 오기
int totalRecordsCount = GetCount();
int pagecount = totalRecordsCount/1000;
for (int j= 0; j <= pagecount; j++)
{
var pageNo= j;
var t = Task.Factory.StartNew(() =>
{
ProcessRowsForPage(pageNo);
});
tasks.Add(t);
}
이상하게 보일 수도 있지만 총계없이 작업을 생성 할 수있는 방법이 있습니다. do while 루프와 같은 것을 사용하고 페치 할 행이 더 이상 없을 때 작업 생성을 중단합니다.
카운트가없는 경우 작업이 마지막 페이지에 도달했다는 것을 어떻게 알 수 있습니까? 이전 작업을 요청해야하지만 이전 작업이 아직 완료되지 않았을 수 있습니다. – NibblyPig
예 참. 총 수를 알지 못한다면 여러 작업을 만들 수 없다고 생각합니다. – DotNetLearner
잠재적으로 한 번에 ConcurrentQueue 및 Dequeue 1000을 사용할 수 있습니다. – apc