17
为什么在使用GetConsumableEnumerable时,parallel.ForEach循环会退出OperationCancelledException?Parallel.ForEach循环与BlockingCollection.GetConsumableEnumerable
//outside the function
static BlockingCollection<double> _collection = new BlockingCollection<double>();
var t = Task.Factory.StartNew(Producer);
Parallel.ForEach(_collection.GetConsumingEnumerable(),item => Console.WriteLine("Processed {0}", item));
Console.WriteLine("FINISHED processing");
public static void Producer()
{
var data = Enumerable.Range(1, 1000);
foreach (var i in data)
{
_collection.Add(i);
Console.WriteLine("Added {0}",i);
}
Console.WriteLine("Finished adding");
_collection.CompleteAdding();
}
真正令我困惑的是,为什么当我调用_collection.CompleteAdding()时,Parallel.ForEach抛出异常。 – Sam
@Sam:说实话,我不想说。有太多的深刻的魔力在那里为我有信心说正确的事情:) –
并行扩展附加的当前URL: https://code.msdn.microsoft.com/ParExtSamples 和有人已经作出一个扩展的NuGet: https://www.nuget.org/packages/MSFT.ParallelExtensionsExtras/ – Reyhn