【发布时间】:2018-05-24 00:03:25
【问题描述】:
我有一个需要并行迭代的对象列表。这是我需要做的:
foreach (var r in results)
{
r.SomeList = await apiHelper.Get(r.Id);
}
因为我想并行化它,所以我尝试使用 Parallel.ForEach() 但它不会等到一切都真正完成后 apiHelper.Get() 正在自己内部进行等待。
Parallel.ForEach(
results,
async (r) =>
{
r.SomeList = await apiHelper.Get(r.Id);
});
于是我在网上搜索,发现了这个: Nesting await in Parallel.ForEach
现在我对 TPL 很陌生(20 分钟前),我可能会遗漏一些明显的东西。我该如何继续?
var getBlock = new TransformBlock<string, List<Something>>(
async i =>
{
var c = await apiHelper.Get(i);
return c;
}, new ExecutionDataflowBlockOptions
{
MaxDegreeOfParallelism = DataflowBlockOptions.Unbounded
});
foreach (var r in results)
{
r.SomeList = getBlock.Post(r.Id); // ERROR: Can't convert boolean to list.
}
getBlock.Complete();
【问题讨论】:
标签: c# async-await task-parallel-library parallel.foreach tpl-dataflow