C# TPL数据流TransformBlock执行顺序似乎有误/异步
我正沿着这个走。我创建了一个C# TPL数据流TransformBlock执行顺序似乎有误/异步,c#,async-await,task-parallel-library,tpl-dataflow,C#,Async Await,Task Parallel Library,Tpl Dataflow,我正沿着这个走。我创建了一个TransformBlock,并通过对其执行Post来执行它 // Process "The Adventurous Life of a Versatile Artist: Houdini" // by Harry Houdini. downloadString.Post("http://www.gutenberg.org/cache/epub/45370/pg45370.txt"); 然后,我调用Complete方法,并有一个Cons
TransformBlock
,并通过对其执行Post
来执行它
// Process "The Adventurous Life of a Versatile Artist: Houdini"
// by Harry Houdini.
downloadString.Post("http://www.gutenberg.org/cache/epub/45370/pg45370.txt");
然后,我调用Complete
方法,并有一个Console.WriteLine(“按键退出:”)代码>行
这是完整的代码。您也可以在此阶段在中找到它
但这是实际输出。(我已经用相同的Console.WriteLine
输出序列运行了几次
实际产量
为什么在调用TransformBlock
控制台之前,按键退出行
既然我首先调用了TransformBlock
控制台.WriteLine,而且这将是管道的一部分,那么就我所知,我没有任何async
代码,而且我也不完全了解TPL数据流的内部工作原理,那么为什么会出现这种情况呢执行有问题吗
谢谢大家!
为什么在调用TransformBlock的Console.WriteLines之前要执行按键退出行
调用Console.WriteLine(“按键退出:”)
发生在TransformBlock
完成转换功能之前。发布到TransformBlock
的每个项目将根据主上下文异步处理
如果您希望等待管道完成,则需要阻止其完成任务
或等待
以异步
方法完成:
private static async Task MainAsync() {
// Process "The Adventurous Life of a Versatile Artist: Houdini"
// by Harry Houdini.
downloadString.Post("http://www.gutenberg.org/cache/epub/45370/pg45370.txt");
downloadString.Complete();
await downloadString.Completion;
}
Post
方法将在已发布的项目存储在块的输入队列中后返回,它不会等待对其进行处理
从:
一旦目标块决定接受或拒绝该项,此方法将返回,但除非目标块的特殊语义另有规定,否则它不会等待该项实际被处理。例如,ActionBlock将发布的项存储到其输入队列中后立即从Post返回
然后异步处理输入队列中的项目。谢谢。因此,当各个块在管道中链接在一起时,如So=>//连接数据流块以形成管道。//downloadString.LinkTo(createWordList);链接到(filterWordList);filterWordList.LinkTo(findReversedWords);findReversedWords.LinkTo(打印反向单词)代码>演练代码的哪一部分确保将上一个块的输出作为输入提供给下一个块?例如:downloadString
的输出作为输入发送到createWordList
(但只有在downloadString
完成后,对不对?@Shiva ex:downloadString的输出作为输入发送到createWordList)(但只有在下载字符串完成后,对吗?LinkTo
将确保从一个块的输出传递到链接块的输入。此外,您还可以在LinkTo
中添加DataflowLinkOptions
,以便在调用时将传播完成
设置为true
。)在第一个块上完成,完成将通过您的管道传播,您将等待管道中最后一个块的完成。
Downloading from http://www.gutenberg.org/cache/epub/45370/pg45370.txt...
Downloaded 129393 characters...
Press a key to exit:
Press a key to exit:
Downloading from http://www.gutenberg.org/cache/epub/45370/pg45370.txt...
Downloaded 129393 characters...
private static async Task MainAsync() {
// Process "The Adventurous Life of a Versatile Artist: Houdini"
// by Harry Houdini.
downloadString.Post("http://www.gutenberg.org/cache/epub/45370/pg45370.txt");
downloadString.Complete();
await downloadString.Completion;
}