我有一个看起来像这样的过程。
分离步骤2& 3是分离从处理文件涉及的问题中读取文件所涉及的问题。
我可以使用三个数据流块对此进行建模。我遇到的问题是,我不希望块3启动,直到所有文件都持久存储到数据库。我需要一些方法来确定块1中已经处理了块1中拾取的所有文件。块2将MaxDegreeOfParallelism
设置为Unbounded
- 我希望它们并行处理。< / p>
我考虑在前两个街区使用Encapsulate
,但我认为这不会奏效。也许我需要某种Batchblock
,但批次的大小不一样。
我该怎么做?我是否需要创建自己的块类型?
答案 0 :(得分:1)
这不适合单个TDF流程,因为步骤#2没有将项目传递到步骤#3,该步骤在之前的步骤已经完成之后开始。
您应该有2个独立的流程。第一个从文件夹读取并存储在数据库中,第二个从数据库读取并开始处理。您可以等待Completion
属性
var reader = // Create #1 block
var dbFiller = // Create #2 block
reader.LinkTo(dbFiller, new DataflowLinkOptions { PropagateCompletion = true }); // Link both blocks with Completion Propagation
reader.Post( // Queue up work for reader
await reader.Completion; // Asynchronously wait for previous steps to complete
var processor = // Create #3 block
processor.Post( // Queue up work for processor