Vb.net 第三方物流数据流——为什么是isn';我的代码是否使用并行处理?

Vb.net 第三方物流数据流——为什么是isn';我的代码是否使用并行处理?,vb.net,tpl-dataflow,Vb.net,Tpl Dataflow,好的-首先,代码 Imports System.Threading.Tasks Imports System.Threading.Tasks.Dataflow Public Class PaymentPipeLine #Region "Properties" Public Property BufferBlock As BufferBlock(Of CPayment) Public Property TransformBlock As TransformBlock(Of

好的-首先,代码

Imports System.Threading.Tasks
Imports System.Threading.Tasks.Dataflow

Public Class PaymentPipeLine


#Region "Properties"

    Public Property BufferBlock As BufferBlock(Of CPayment)
    Public Property TransformBlock As TransformBlock(Of CPayment, Task)
    Public Property ActionBlock As ActionBlock(Of Task)

    Public Property IncrementPayment As Action

#End Region

#Region "Constructor"
    Public Sub New(action As Action)
        Me.IncrementPayment = action
        BufferBlock = New BufferBlock(Of CPayment)
        TransformBlock = New TransformBlock(Of CPayment, Task)(Function(x As CPayment)
                                                                   Dim t = Task.Run(Sub()
                                                                                        x.process(Nothing)
                                                                                        Me.IncrementPayment.Invoke()
                                                                                    End Sub)
                                                                   Return t
                                                               End Function)
        ActionBlock = New ActionBlock(Of Task)(Sub(x As Task)
                                                   x.Wait()
                                               End Sub)
        Dim dataflowLinkOptions = New DataflowLinkOptions()
        dataflowLinkOptions.PropagateCompletion = True
        BufferBlock.LinkTo(TransformBlock, dataflowLinkOptions)
        TransformBlock.LinkTo(ActionBlock, dataflowLinkOptions)


    End Sub
#End Region

#Region "Methods"
    Public Sub Process()
        ActionBlock.Completion.Wait()
    End Sub

#End Region

End Class
现在,调用该函数的代码基本上会将值发布到BufferBlock中,在值用完时将其标记为完成,然后在管道上调用Process()方法

我原以为这会导致并行处理付款,但我看不到任何性能改进(代码的主要部分是对web服务的IO调用以处理付款)。我只能得出结论,付款是通过管道一个接一个

如何将其发送到以下任一位置: a) 在添加付款时发送付款(不要等待其他付款先通过),或 b) 与a相同,但限制为一次只能通过5个

有什么想法吗?非常感谢您的建议

马丁我发现了这个问题


我必须使用
ExecutionDataflowBlockOptions
对象和
ActionBlock
的构造函数,在
ExecutionDataflowBlockOptions
上,我必须设置
MaximumDegreeOfParallelization

感谢编辑Peter-很高兴讨论C解决方案-这是我的心所在。。。我怀疑我使用的框架不正确,而不是语言#