非常に大きなフラット ファイルを反復処理するサード パーティのライブラリを使用していますが、これには数分かかる場合があります。ライブラリは列挙子を提供するため、列挙子がフラット ファイル内の次の項目を抽出している間に、各結果を生成して処理できます。
例えば:
IEnumerable<object> GetItems()
{
var cursor = new Cursor;
try
{
cursor.Open();
while (!cursor.EOF)
{
yield return new //object;
cursor.MoveNext();
}
}
finally
{
if (cursor.IsOpen)
{
cursor.Close();
}
}
}
私が達成しようとしているのは、同じ Enumerable の 2 つのコンシューマーを持つことです。これにより、情報を 2 回抽出する必要がなくなり、各コンシューマーは、すべての時間が到着するのを待たずに、到着したときに各アイテムを処理できます。一度。
IEnumerable<object> items = GetItems();
new Thread(SaveToDateBase(items)).Start();
new Thread(SaveSomewhereElse(items)).Start();
私が達成しようとしているのは次のようなものだと思います
「消費者が求めているアイテムがすでに抽出されている場合はそれを生成し、そうでない場合は次に移動して待機します」しかし、2つのスレッド間で MoveNext() が衝突する可能性があることを認識しています。
それがどのように達成されるかについての考えがなければ、このようなものはすでに存在しますか?
ありがとう