【发布时间】:2018-11-16 06:08:49
【问题描述】:
我正在尝试使用 Parallel.Foreach() 并行查询 mongo-db,但我没有得到任何结果。但是当我尝试在常规 foreach 循环中运行相同的东西时,我能够执行预期的任务。
var exceptions = new ConcurrentQueue<Exception>();
var secondaryObjectsDictionaryCollection = new Dictionary<string, List<JObject>>();
// This works
foreach(var info in infos)
{
try
{
name = await commonValidator.ValidateAsync(name);
await commonValidator.ValidateIdAsync(name, id);
var list = await helper.ListRelatedObjectsAsync(name, id, info, false);
secondaryObjectsDictionaryCollection.Add(info.PrimaryId, secondaryObjectsList.ToList());
}
catch (Exception ex)
{
exceptions.Enqueue(ex);
}
}
//This does not
Parallel.ForEach(infos, async info =>
{
try
{
name = await commonValidator.ValidateAsync(name);
await commonValidator.ValidateIdAsync(name, id);
var list = await helper.ListRelatedObjectsAsync(name, id, info, false);
secondaryObjectsDictionaryCollection.Add(info.PrimaryId, secondaryObjectsList.ToList());
}
catch (Exception ex)
{
exceptions.Enqueue(ex);
}
});
我只想并行执行此任务,因为涉及不同的 mongodb 集合,并且还可以减少响应时间。
我无法弄清楚我的并行循环中出了什么问题。 并行执行这些任务的任何其他方法也将起作用。
【问题讨论】:
-
也许删除所有
catch语句会显示异常并帮助您解决? -
@UweKeim 这样做给了我一些来自 mongodb 的预期异常,一段时间后应用程序进入中断模式。
标签: c# asynchronous async-await parallel.foreach