ソース項目のバッチを作成するために呼び出す高価なメソッドがあります。
private Task<List<SourceItem>> GetUnprocessedBatch(int batchSize)
{
//impl
}
処理するアイテムがない場合 (または特定のしきい値を下回った場合) にのみ、新しいアイテムを入力したいと考えています。これまで、どのSourceメソッドを使用すればよいかわかりませんでした。
新しいアイテムを返し続ける粗いストリームを実装しました。
public class Stream
{
private readonly Queue<SourceItem> scrapeAttempts;
private int batchSize = 100;
private int minItemCount = 10;
public Stream()
{
scrapeAttempts = new Queue<SourceItem>();
}
public async Task<SourceItem> Next()
{
if (scrapeAttempts.Count < minItemCount)
{
var entryScrapeAttempts = await GetUnprocessedBatch(batchSize);
entryScrapeAttempts.ForEach(attempt => scrapeAttempts.Enqueue(attempt));
}
return scrapeAttempts.Dequeue();
}
}
Source.Task
うまくいくと思っていましたが、一度しか呼び出されないようです。このシナリオのソースを作成するにはどうすればよいですか?