为网站抓取工具实施的 TPL 数据流

TPL Dataflow to be implemented for a Website scraper

好吧,我知道我的问题需要更多的指导,而不是技术细节,但我希望 SO 成员不会介意 TPL 数据流的新手提出一些非常基础的问题。

我有一个简单的 Windows 表单应用程序,它负责从我系统上的 Excel 文件中提取数据并将它们保存在数据库中。这个过程太长了,我想把它变成异步和并行的。以下是我的场景简介。

Call function to Open connection to the database at the start

Call function to Update database with the time of the operation

Application needs to process suppose 100 Excel files which are in incremental order. For this I have used FileNumber which is incremented with each call.

Call function to UpdateUI (PageNumber is passed) (Example. File 1 processing)

Call function to Read Excel file (PageNumber is passed)

Call function to Process Excel file data (Excel Data is passed and PageNumber is passed)

Call function to Save values in the database (Excel Data is passed and PageNumber is passed)

Call function to UpdateUI (PageNumber is passed) (Example. File 1 processed)

现在我所取得的成就是我能够使用任务使这个过程异步。我对所有长 运行ning 操作都使用了 async 和 await,并将我的函数转换为任务。

现在我想使一些任务 运行 并行。并非每个任务都是并行的,例如 OpenDatabase 连接只是异步的。但是我想创建一个任务或函数,它将为我的应用程序中的每个 Task/Function 使用数据流块,从更新 UI 到读取 Excel 文件并将它们保存到数据库中。

我开始使用 ActionBlock 来尝试这个,但是有太多不同的块我一无所知。请指导我在这种情况下将使用哪个块。如果有人为这种情况提供伪代码,那将非常棒。我会有所作为的。

在学习了 TPL Dataflow 之后,我设法对它及其块有了基本的了解。我在下面提到我的理解,以防其他人需要抢先一步。

TPL 数据流建立在 TPL(任务并行库)之上,其主要目的是实现 producer/reciever(actor/agent)设计。

TPL 数据流由块组成,这些块也称为数据流块。这些数据流块的目的是缓冲、处理和传播数据。每个块可以是接收者或生产者,也可以是两者。

无论其用途如何(接收方、生产方),每个块都实现 IDataflowBlock。此接口的目的是制作一个 class 作为数据流块。第二个目的是使任何块能够通过成功完成或故障关闭,最后这个接口使块能够 return System.Threading.Task 代表块异步完成。

此外,还有其他不同的接口,根据其用途使用,即接收者、生产者或传播者。接收者块实现 ISourceBlock,生产者块实现 ITargetBlock 和传播者 IPropagatorBlock。

块也可以分为其他类别,例如,

>> Execution Blocks
    >> ActionBlock
    >> TransformBlock
    >> TransformManyBlock

>> Buffering Blocks
    >> BufferBlocl
    >> BrodcastBlock
    >> WriteOnceBlock

>> Joining Blocks
    >> BatchBlock
    >> JoinBlock
    >> BatchedJoinBlock

除了这些内置块之外,还可以编写自定义块,但在大多数情况下,这些块都能达到目的。此外,我还可以包括每个块的用途,但它会成为一篇文章。这是我的基本理解,我仍在学习和探索 TPL 数据流。

如果有人想了解专门针对数据 scraper 的 TPL 数据流,那么这里是示例数据流框图,以帮助更好地理解该过程。

来源:https://petermeinl.wordpress.com/2012/10/13/a-webcrawler-demonstrating-the-beauty-of-tpl-dataflow/