0

我当前的解决方案使用 ThreadPool 来处理事务。每隔几分钟,我就会抓取 1-200 个事务,并通过 QueueUserWorkItem 函数对每个事务进行排队。像这样的东西,“trans”是我的交易集合:

        For Each t As ManagerTransaction In trans
          Threading.ThreadPool.QueueUserWorkItem(AddressOf ProcessManagerTransaction, t)
        Next

我想将其切换为使用 TPL,但是,经过大量研究,我仍然不确定最好的方法。我有以下选择,但我无法就最佳实践达成普遍共识。

1) Threading.Tasks.Parallel.ForEach(trans, AddressOf ProcessManagerTransaction)

其中“t”是我的“trans”集合中的单个交易

2) Task.Factory.StartNew(AddressOf ProcessManagerTransaction, t)
2a) Task.Factory.StartNew(Sub() ProcessManagerTransaction(t)

而这两者的结合:

3) Task.Factory.StartNew(Function() Parallel.ForEach(trans, AddressOf ProcessManagerTransaction))
4

1 回答 1

1

第一个选项通常是可取的,因为它可以完成您想要的一切:并行化和错误传播。选项 2 和 3 需要额外的方法来传播错误。

如果您需要任务,则选项 2 可能会发挥作用,以便您可以将它们与其他任务组合在一起。

我真的没有看到我会使用选项 3 的情况。

于 2013-01-14T20:19:40.370 回答