テーブルには約300万行があります。私はすべての行を取得し、それらの行を処理するコンソールアプリケーションを持っています。私は一度に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