【问题标题】:Same delegates with different params in TPL Dataflow blocksTPL 数据流块中具有不同参数的相同代表
【发布时间】:2015-03-23 14:43:33
【问题描述】:

我的 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 表达式。它会引起一些麻烦。所以问题是:如何用 Delegate 函数替换它。我的意思是使用AddressOf Smthn。我需要以某种方式将blockNum 传递给每个块。

更新:

我不想使用 lambda 有两种麻烦:

首先:我的 lambda 表达式太大,很难使用它并在编辑器中修改它:如果出现问题,整个表达式都会出错。

第二个:我想用 Dataflow 管道创建一个基类,并且只更改派生类中的块委托。

【问题讨论】:

  • 会造成什么样的麻烦?

标签: vb.net delegates task-parallel-library tpl-dataflow addressof


【解决方案1】:

为什么不将所有代码从 lambda 转移到一个真正的函数中。然后创建一个小的 lambda 来捕获 blockNum 并将其传递给所述函数?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2012-06-24
    • 2016-02-12
    • 2011-02-08
    • 1970-01-01
    • 2015-01-28
    相关资源
    最近更新 更多