背景 我有一个应用程序,定期接收数据转储(XML文件),并使用Entity Framework 5(Code First)将它们导入到现有数据库中。导入是通过EF5而不是例如BULK INSERT或BCP进行的,因为必须应用已经存在于实体中的业务规则。 在应用程序本身中处理似乎是CPU绑定...
我原以为以下代码可以从两个发布者(publishers)那里都输出结果,但实际上只从第一个发布者那里输出结果: 我期望以下代码可以从两个发布者那里都得到输出,但它仅从第一个发布者那里输出结果:var broadcastBlock = new BroadcastBlock<int>...
我需要完成以下工作: 从数据库获取页面对象 对于每个页面,获取所有图片并处理它们(I/O绑定,例如上传到CDN) 如果所有图片都成功处理,则在数据库中标记页面为已处理 由于我需要控制并行处理的页面数量,因此我决定使用TPL数据流: ___________________________...
我只想学习它们以及如何将它们结合使用。我知道它们可以互相补充,但我找不到有人真正做到这一点的例子。
我已经使用TPL Dataflow实现了生产者..消费者模式。使用案例是代码从Kafka总线中读取消息。为了提高效率,当发送到数据库时,我们需要批量处理消息。 在TPL数据流中是否有一种方式可以保留消息,并在达到大小或持续时间阈值时触发? 例如,当前的实现在从队列中拉出消息后立即发布该消息。 ...
假设我有一个简单的ActionBlock<int>var actionBlock = new ActionBlock<int>(_ => Console.WriteLine(_)); 我可以指定一个有限的容量来启用缓冲:var actionBlock = new ...
我需要在工作流中引入重试策略。假设有3个块以如下方式连接: var executionOptions = new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 3 }; var buffer = new BufferBloc...
我创建了这个来测试并行提取: public static async Task ExtractToDirectoryAsync(this FileInfo file, DirectoryInfo folder) { ActionBlock<ZipArchi...
我需要构建TPL数据流管道来处理大量的消息。因为有很多消息,我不能简单地将它们Post到BufferBlock的无限队列中,否则我将面临内存问题。所以我想使用BoundedCapacity = 1选项禁用队列,并使用MaxDegreeOfParallelism来使用并行任务处理,因为我的Tra...
我阅读过很多技术文档,包括一些由Microsoft团队或其他作者编写的有关新TPL Dataflow库、async/await并发框架和TPL功能的详细说明。然而,我并没有真正找到清晰地区分它们各自应该在何时使用的内容。我知道每个工具都有其适用性和应用场景,但具体来说: 我有一个完全在进程内...