简而言之
我创建了一个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输入队列中排队。
但保存永远不会被调用。
我做错了什么?
答案 0 :(得分:0)
解决方案在评论中。原因是制作人创建了很多线程,这就是为什么消费者从来没有机会开火。