线程池到任务转换

时间:2013-01-14 20:05:54

标签: vb.net multithreading task-parallel-library threadpool .net-4.5

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

1 个答案:

答案 0 :(得分:1)

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

如果您要求拥有任务,则选项2可能会起作用,因此您可以将其与其他任务组合在一起。

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

相关问题