私は今TPLで働き始めています。このビデオでは、TPLを利用した生産者/消費者モデルの簡単なバージョンを見てきました。
ここに問題があります:
次のコード:
BlockingCollection<Double> bc = new BlockingCollection<Double>(100);
IEnumerable<Double> d = bc.GetConsumingEnumerable();
IEnumerable<Double>
foreachを使用して反復(および自動的に消費)できるanを返します。
foreach (var item in d)
{
// do anything with item
// in the end of this foreach,
// will there be any items left in d or bc? Why?
}
私の質問は次のとおりです。
IEnumerator<Double> dEnum = d.GetEnumerator()
fromを取得した場合(たとえば、ループでd
反復処理するため) 、リストも消費されますか?(私の答え:私が何を意味するかを知っているなら、はとリンクされていないので、私はそうは思いません。したがって、それは消費しますが、消費しませんし、さらには)d
while
d.MoveNext()
dEnum
d
dEnum
d
bc
- ループ以外の方法でループ
bc
(または)して、アイテムを消費してもよいですか?(サイクルはループよりもはるかに速く、科学計算の問題のパフォーマンスの問題が心配です)d
foreach
while
foreach
- タイプで正確に消費するとはどういう意味
BlockingCollection<T>
ですか?
例:コード:
IEnumerator<Double> dEnum = d.GetEnumerator();
while (dEnum.MoveNext())
{
// do the same with dEnum.Current as
// I would with item in the foreach above...
}
よろしくお願いします!