このスレッドで、Parelle と Task に関する質問がありました。この質問に関連する前の質問
私がやろうとしているのは、sproc を介してエンティティ フレームワークから返されたコレクションを反復処理することです。
すべてのクエリは最初のループでは完全ですが、2 番目のループで前のクエリ結果をスキップしようとすると、クエリの結果を複数回列挙することはできませんというエラーが発生します。
デバッガーが、このコレクションをこの方法でページングできないことを通知していることに気付きました。
.Skip() を使用してそのエラーが発生しないようにするにはどうすればよいですか? 最後に到達するまで、コレクション全体を反復処理できる必要があります。
これを行う魔法は何ですか?
前述のように、一度ループできますが、その後、そのエラーが発生します。
ヘルプ!
ObjectResult<Guid?> memIDs = await Task.Run(() => db.proc_GetCollaborator_UserIDs(projectID));
if (memIDs != null)
{
while (true)
{
var t = memIDs.Take(Environment.ProcessorCount)
.Select(id => Task.Run(() => projCollabors.Add(new Collaborator(id.Value, projectID))))
.Skip(skip)
.ToArray();
if (t.Length == 0) { break; };
skip += Environment.ProcessorCount;
await Task.WhenAll(t);
};
};