BufferBlock <t> - &gt; ActionBlock <t>未触发

时间:2016-02-14 19:17:39

标签: c# task-parallel-library tpl-dataflow dataflow

简而言之

我创建了一个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);

save方法如下所示:

    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输入队列中排队。

但保存永远不会被调用。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

解决方案在评论中。原因是制作人创建了很多线程,这就是为什么消费者从来没有机会开火。