我在下面的senario中使用TPL执行数据流。 a
和b
是连接在一起的某些数据源,然后通过数据流。
var a = new TransformBlock<object, int>(_ => 1);
var b = new TransformBlock<object, int>(_ => 2);
var join = new JoinBlock<int, int>(new GroupingDataflowBlockOptions { Greedy = false });
var transform = new TransformBlock<Tuple<int, int>, int>(uri =>
{
Console.WriteLine("Handling '{0}'...", uri);
return uri.Item1;
});
var printReversedWords = new ActionBlock<int>(ddd => Console.WriteLine(ddd));
var linkOptions = new DataflowLinkOptions { PropagateCompletion = true };
a.LinkTo(join.Target1);
b.LinkTo(join.Target2);
join.LinkTo(transform);
transform.LinkTo(printReversedWords, linkOptions);
a.Post(1);
b.Post(1);
Task.WhenAll(a.Completion, b.Completion).ContinueWith(_ => join.Complete());
printReversedWords.Completion.Wait();
所有这些之后,我可以在控制台中看到如下日志:
处理'<1,2>'...
1
这意味着ActionBlock printReversedWords
已被处理。但是,它仍在等待最后一行,永远不会结束。
谁能告诉我该更新什么?
答案 0 :(得分:0)
要完成管道,您需要在链中的第一个块上调用Blade::component('components.PageNav'); // "/views/components/PageNav.php"
。在您的情况下,您需要确保在两个块Complete
和Complete()
上都调用了a
。并且您需要从b
此外,最好是使方法JoinBlock
和.Wait()
完成,而不是阻塞调用async
。
在配置延续时,请确保通过故障下游块An example is here处理异常和成功完成。
await