【发布时间】:2020-03-11 12:16:08
【问题描述】:
我有这个代码sn-p:
static void Main(string[] args)
{
var printResult = new ActionBlock<int>(x =>
{
Console.WriteLine(x);
});
var countBytes = new TransformBlock<int, int>(
new Func<int, int>((x)=> { return 2 * x; }));
countBytes.LinkTo(printResult, new DataflowLinkOptions { PropagateCompletion = true });
countBytes.Completion.ContinueWith(delegate { printResult.Complete(); });
countBytes.Complete();
printResult.Completion.Wait();
Console.ReadKey();
}
我预计TransformBlock的代码
return 2*x
会运行,然后打印结果,但实际上什么也没打印。我在里面设置了一个断点
printResult
Console.WriteLine 上的函数对象,但它没有被介入。
为什么没有打印出来,我在哪里出错以及如何解决?
【问题讨论】:
-
你还没有向任何一个区块发布任何内容
-
而
countBytes.Completion.ContinueWith(delegate { printResult.Complete(); });行做了PropagateCompletion = true已经做的事情 -
你应该在调用
countBytes.Complete();之前添加countBytes.Post(123); -
代码块似乎是从这里复制的:docs.microsoft.com/en-us/dotnet/standard/parallel-programming/…,因此有趣的是缺少以下行:countBytes.Post(tempFile);
标签: c# parallel-processing tpl-dataflow