我尝试使用此项目中的 ParallelForEachAsync 方法异步和并行执行此代码:https ://github.com/Dasync/AsyncEnumerable 。不幸的是,该方法永远不会返回。SampleProduct 是一个简单的 DTO,它具有一个布尔属性和两个字符串属性。GetOsmData 方法尝试通过 http-request 获取数据,但经常抛出异常。
我的第一次尝试是没有 .ConfigureAwait(false),但结果相同...如果我尝试使用产品列表 (products.Count = 8) 使用此方法,结果.Count 总是停止 7。
private async Task<ConcurrentBag<SampleProduct>> CheckOsmDataAsync(List<SampleProduct> products)
{
var result = new ConcurrentBag<SampleProduct>();
await products.ParallelForEachAsync(
async product =>
{
OsmData osmData;
try
{
osmData = await GetOsmData(_osmUrl.Replace("articlenumber", product.MaterialNumber.ToString())).ConfigureAwait(false);
}
catch (Exception e)
{
osmData = null;
}
if (osmData != null && osmData.PrintingData.Count > 0)
{
product.OsmPrintImageAvailable = true;
}
else
{
product.OsmPrintImageAvailable = false;
}
result.Add(product);
},
// 0 => Chooses a default value based on the processor count
maxDegreeOfParallelism: 0
);
return result;
}