我使用 TPL 数据流设计了一个简单的 JobProcessor(我第一次使用它)。 我希望能够创建作业,并将它们调用并放置在优先队列(PriorityBufferBlock)中。 我的代码结构如下 在哪里 我有一个自定义版本的PriorityBufferBlock (取自PriorityBuffe ...
我使用 TPL 数据流设计了一个简单的 JobProcessor(我第一次使用它)。 我希望能够创建作业,并将它们调用并放置在优先队列(PriorityBufferBlock)中。 我的代码结构如下 在哪里 我有一个自定义版本的PriorityBufferBlock (取自PriorityBuffe ...
我有一个处理传入请求的即发即弃 Web 服务。 该请求需要 go 通过单线程 TPL 管道与数据库交互的进程数。 如果任何进程失败,则应重试消息,但应将其放在该块队列的末尾。 换句话说,重试不应该由委托来处理; 它应该是 go 到行的后面(其重试计数器增加)。 TPL 是否内置了这种类型的功能, ...
我的用例是这样的:向我们的应用程序服务器发送 100,000 多个 Web 请求并等待结果。 在这里,大部分延迟是 IO 绑定的,而不是 CPU 绑定的,所以我知道数据流库可能不是最好的工具。 我已经设法使用它会取得很大的成功,并将MaxDegreeOfParallelism设置为我相信服务器能够处 ...
我需要遍历一组不相交的文件夹; 每个文件夹都与文件夹中某处配置的访问时间相关联。 然后我对文件夹进行排序,首先处理访问时间最早的文件夹。 请注意,处理通常比遍历慢。 我的代码针对Framework4.8.1; 目前我的实现如下: 对于上面的内容,我担心while(_notComplete)部分,因 ...
假设我想创建一个自定义的ISourceBlock<T> 。 从MSDN 滑动窗口示例中,我可以像这样开始构建自定义块: 问题是,由于ISourceBlock<T>接口的实现被转发到我的私有_source字段,链接块将不会直接调用SomeCustomBlock的Consume ...
我收到一系列对象(例如ItemGroup[] ),每个对象都包含多个作业(例如Item[] )和最大并行度值,例如: ItemGroup实例序列必须按顺序处理,但每个ItemGroup的最大并行度可能高于 1。例如,管道将按顺序处理A*项组,然后并发处理B*项组: 我认为从IPropagatorB ...
我将 TPL DataFlow 与 BatchBlock 一起使用,当当前排队或推迟的项目数在超时后小于 BatchSize 时自动触发,如下所示: 即最大批量大小:4 和超时 10 秒 但我的问题是如何避免每次块收到新项目时超时都重置为 0? ...
我有一个现有的转换 function Func<IAsyncEnumerable<TIn>, IAsyncEnumerable<TOut>>我想在数据流管道中使用。 In order to link this transformation function, ...
考虑以下使用 TPL 数据流的程序。 因此, ActionBlock来自 Dataflow 库。internal static class Program { public static async Task Main(string[] args) { var ac ...
我有一个大型文件夹结构,我正试图从共享驱动器下载。 共享驱动器很慢,但它也有几个镜像。 为了加快这个过程,我正在尝试制作一个小的下载器应用程序来管理与所有慢速镜像的并行连接。 单个文件将从不同的镜像下载。 我还希望能够限制一次连接到每个镜像的线程数。 (这已经存在了吗?那我就不用写任何代码了。不 ...
alloc_fn:方法 LinkTo<X.Offers.Core.DataFlow.RefreshOfferMatching.RefreshUsersOffersContext> 始终分配并返回资源 class System.Threading.Tasks.Dataflow.Inter ...
只是想知道数据流库中的MaxDegreeOfParallelism设置。 我正在写一个单元测试来确保并行任务的数量不超过指定的数量,当我发现它确实有时会超过。 我的问题是:我在衡量它时做错了什么,还是设置只是限制并行性的“最佳尝试”?using System.Threading.Tasks.Dat ...
我一直在做一些 TPL 数据流编码,并且对基础知识非常满意。 我的问题是,我将如何做一个 TPL 块,除了对其队列做出反应外,它还拥有自己的生命? 比如,一个在永久循环上运行的后台任务,每隔几秒钟轮询一次奇怪的 web 服务或数据库,并在它认为合适的时候在其输出上发出消息? 该接口将是源块和目标 ...
我正在尝试使用System.Threading.Tasks.Dataflow实现一个经典的 map-reduce 问题,虽然我可以得到一些(某种)工作,但我正在努力了解如何概括此功能。 给定一个简单的问题产生一个 stream 的整数; 并平行于每个数字平方数加 5 除以 2 取所有数字的总和我遇到 ...
我正在尝试了解使用BatchBlock ,因为它似乎是我正在从事的项目所需要的。 但是,我特别挂断了一个部分,这就是确保批处理完成的方法。 以下面的代码为例。 它的批量大小为 5。向其发送了五个值using System; using System.Linq; using System.Thread ...
我创建了 TPL 数据流管道,如下所示 对于所有数据块,都使用ExecutionDataflowBlockOptions.EnsureOrdered = true进行初始化。 所有块都按照上述顺序正确链接DataflowLinkOptions.PropagateCompletion = true 。 ...
考虑 16 核机器 Extract - TransformBlock 上的以下 DataFlow 管道。 绑定容量:32,DOP:16 下载 - TransformBlock。 绑定容量:1,024,DOP:64 Process - TransformBlock。 绑定容量:50,000,DOP:1 ...
在 C# 中,我使用任务并行库 (TPL)下载图像,处理图像并保存分析结果。 简化的代码如下所示。var getImage = new TransformBlock<int, Image>(GetImage); var proImage = new TransformBlock<I ...
我有一个链接到多个动作块的缓冲区块: 效果是缓冲区块累积项目,一旦工人消费者可以接受更多项目,它就会得到它们(消费者一次设置为一个项目)。 像这样,我有 N 个工作线程,而它们都在同一个队列上工作。 到目前为止,一切都很好。 现在我有一个管道,其中有两个缓冲区块,每个缓冲区都有一定优先级的工作项: ...
我有一个 TPL 数据流,它只使用一个转换块,然后是一个动作块就可以正常工作。 我添加了一个新的动作块,与现有的动作块同时执行,但我的新动作块永远不会被击中。 没有抛出错误或异常。 我需要在代码中添加一个步骤吗? ...