我当前的解决方案使用 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))