オブジェクトでLinqを使用していますが、質問があります。
実際のワークロードはバックグラウンドジョブで処理されます。
実際のワークロードをそれ以上のタスクに費やすべきではありません。さらに重要なのは、実際の作業項目を処理するメソッドが非常に高速に処理して結果を出すため、完全なワークロードが作業項目のチャンクに配置されることです。
一度に処理するのはリストの最初のn個のオブジェクトのみであるため、n個のオブジェクトを取得して、作業項目の完全なリストから削除します。
Roughly:
int amount = 100;
List<WorkItem> actualWorkload = null;
lock(lockWorkload){ // complete Workload is filled in other thread
if (actualWorkload.Count > amount)
{
actualWorkload.AddRange(completeWorkload.Take(amount));
}
else
{
actualWorkload.AddRange(completeWorkload);
}
completeWorkload.RemoveAll(x => actualWorkload.Contains(x));
}
//do something with workitems Process(actualWorkload);
私の質問は、「取得」と「削除」を何らかの方法で組み合わせて、アイテムを取得してリストからこのアイテムを直接削除する手順が1つだけになるようにすることはできますか?アイテムが返されるときにアイテムを削除するBlockingCollectionの「Take」に似たものを検索します。