TPL 数据流块中具有不同参数的相同委托
Same delegates with different params in TPL Dataflow blocks
我的 TPL 数据流管道使用多个相同的块,唯一的区别是每个块都使用它的个人代理来发送 http 请求。所以WebProxy
这里是一个参数。我这样做是为了创建它们(概念上的简化示例,WebProxy
替换为 blockNum Integer
):
Private Sub CreateBlocks()
Dim blocks As New List(Of TransformBlock(Of Integer, Integer))
For i = 0 To 100
Dim blockNum As Integer = i
Dim block As New TransformBlock(Of Integer, Integer)(Function(_arg)
Return _arg + blockNum
End Function)
blocks.Add(block)
Next
End Sub
我使用了 lambda 表达式。它会引起一些麻烦。所以问题是:如何用委托函数替换它。我的意思是使用 AddressOf
Smthn。我需要以某种方式将 blockNum
传递给每个块。
更新:
我不想使用 lambda 有两种麻烦:
首先:我的 lambda 表达式太大,很难在编辑器中使用和修改它:如果出现问题,整个表达式都会出错。
其次:我想使用 Dataflow 管道创建一个基础 class,并且仅更改派生 classes 中的块委托。
为什么不将所有代码从 lambda 移到真正的函数中。然后创建一个小的 lambda 来捕获 blockNum 并将其传递给所述函数?
我的 TPL 数据流管道使用多个相同的块,唯一的区别是每个块都使用它的个人代理来发送 http 请求。所以WebProxy
这里是一个参数。我这样做是为了创建它们(概念上的简化示例,WebProxy
替换为 blockNum Integer
):
Private Sub CreateBlocks()
Dim blocks As New List(Of TransformBlock(Of Integer, Integer))
For i = 0 To 100
Dim blockNum As Integer = i
Dim block As New TransformBlock(Of Integer, Integer)(Function(_arg)
Return _arg + blockNum
End Function)
blocks.Add(block)
Next
End Sub
我使用了 lambda 表达式。它会引起一些麻烦。所以问题是:如何用委托函数替换它。我的意思是使用 AddressOf
Smthn。我需要以某种方式将 blockNum
传递给每个块。
更新:
我不想使用 lambda 有两种麻烦:
首先:我的 lambda 表达式太大,很难在编辑器中使用和修改它:如果出现问题,整个表达式都会出错。
其次:我想使用 Dataflow 管道创建一个基础 class,并且仅更改派生 classes 中的块委托。
为什么不将所有代码从 lambda 移到真正的函数中。然后创建一个小的 lambda 来捕获 blockNum 并将其传递给所述函数?