gpt4 book ai didi

c# - 为网站抓取工具实现的 TPL 数据流

转载 作者:行者123 更新时间:2023-11-30 17:42:18 30 4
gpt4 key购买 nike

好吧,我知道我的问题需要更多的指导,而不是技术细节,但我希望 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)

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

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

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

最佳答案

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

TPL Dataflow 建立在 TPL(任务并行库)之上,其主要目的是实现生产者/接收者(参与者/代理)设计。

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

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

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

block 也可以分为其他类别,如

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

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

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

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

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

Web Crawler Demonstration in TPL Dataflow

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

关于c# - 为网站抓取工具实现的 TPL 数据流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32073831/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com