Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 缓冲块<;T>-&燃气轮机;ActionBlock<;T>;不开火_C#_Task Parallel Library_Tpl Dataflow_Dataflow - Fatal编程技术网

C# 缓冲块<;T>-&燃气轮机;ActionBlock<;T>;不开火

C# 缓冲块<;T>-&燃气轮机;ActionBlock<;T>;不开火,c#,task-parallel-library,tpl-dataflow,dataflow,C#,Task Parallel Library,Tpl Dataflow,Dataflow,简言之 我创建了一个BatchBlock,它链接到一个ActionBlock,ActionBlock调用一个异步方法,但这个方法从不触发 详细信息 下面是我如何创建块的 var instance = new ConnectionSaveStep(repo, progress, total); var batch = new BatchBlock<LandingPageConnection>(10000); saveAction = ne

简言之

我创建了一个BatchBlock,它链接到一个ActionBlock,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方法从未被提出

当我查看batch和saveAction的属性时,我可以看到,首先,batch块的unput队列中的项目数在不断增加,直到达到batchblock大小。之后,一个包含10.000个工作项的项在saveACtion输入队列中排队

但拯救永远不会被调用


我做错了什么?

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

如果不使用
并行,它能工作吗。ForEach
?好主意,我来试一试。但从我的经验来看,这也应该适用于每种类型的并行代码。您的代码中没有任何问题。但是可能是并行的。ForEach完全占据了
线程池
,并且没有为
操作块
留出空间。嗯,是的,也许我也会尝试限制线程的数量。你是对的,但我主要想理解为什么它不起作用。原因是在我发布的代码下面有一个小代码片段,它引发了一个nullrefence异常
    internal async Task Save(IEnumerable<LandingPageConnection> pages)
    {
        Trace.WriteLine("Inserting " + pages.Count() + " items ...");
        await repo.InsertBatchAsync(pages);
    }
 Parallel.ForEach(cities, city=>
          { 
             var pages= BuildLandingPage(city);
             batch.Post(pages);