BufferBlock<T> -> ActionBlock<T> 未触发

BufferBlock<T> -> ActionBlock<T> Not Firing

简而言之

我创建了一个 BatchBlock,它链接到一个调用异步方法的 ActionBlock,但是这个方法永远不会触发。

详情

这是我创建块的方法

        var instance = new ConnectionSaveStep(repo, progress, total);
        var batch = new BatchBlock<LandingPageConnection>(10000);
        saveAction = new ActionBlock<IEnumerable<LandingPageConnection>>(i => instance.Save(i));
        batch.LinkTo(saveAction);

保存方法如下所示:

    internal async Task Save(IEnumerable<LandingPageConnection> pages)
    {
        Trace.WriteLine("Inserting " + pages.Count() + " items ...");
        await repo.InsertBatchAsync(pages);
    }

元素(大约 1 mio)在 Parallel.ForEach 内排队。

 Parallel.ForEach(cities, city=>
          { 
             var pages= BuildLandingPage(city);
             batch.Post(pages);

但保存方法从未被引发

当我查看批处理和 saveAction 的 属性 时,我可以看到批处理块的未输入队列中的项目数量首先增加,直到达到批处理块大小。之后,具有 10.000 个工作项的一项在 saveACtion 输入队列中排队。

但是永远不会调用保存。

我做错了什么?

解决办法在评论里。原因是生产者创建了很多线程,这就是为什么消费者永远没有机会开火的原因。