为什么这个 ParallelForEachAsync-Method 从不 return?

Why does this ParallelForEachAsync-Method never return?

我尝试使用此项目中的 ParallelForEachAsync 方法异步和并行执行此代码:https://github.com/Dasync/AsyncEnumerable。不幸的是,该方法从未 returns。 SampleProduct 是一个简单的 DTO,它有一个布尔值 属性 和两个字符串属性。 GetOsmData 方法尝试通过 http 请求获取数据,但经常抛出异常。

我的第一次尝试没有使用 .ConfigureAwait(false),但结果相同... 如果我使用产品列表尝试此方法 (products.Count = 8) result.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;
        }

在我同事的帮助下我解决了这个问题...问题不在方法本身,而在于它是如何被调用的。我从 Main/UI-Thread 同步调用它。这似乎造成了僵局。使调用方法异步并等待 CheckOsmDataAsync() 解决了问题。

不过还是感谢您的回复!