0

我目前的解决方案使用ThreadPool来处理事务。每隔几分钟我就抓取1-200个事务,并通过QueueUserWorkItem函数对每个事务进行排队。像这样的东西在哪里“反式”是我交易的集合:线程池到任务转换

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

我想切换过来使用TPL,然而,大量的研究后,我仍然不确定的去了解它的最佳方式。我有以下选择,但我还没有能够就最佳实践达成普遍共识。

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

其中 “t” 是一个独立的事务在我的 “反式” 收集

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

而这两者的组合:

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

没有达成共识,因为所有的选项可能是有用的,这取决于究竟你想要的情况。 – svick

回答

1

第一个选项是一般perferrable因为它做你想要的一切:错误的并行化和传播。选项2和3需要额外的手段来传播错误。

如果您的需要有任务,您可以将它们与其他任务合并,选项2可能会发挥作用。

我实在不明白,我会用选项3.

+0

如果要并行化并且不阻止当前线程(例如,当它是GUI线程),则选项3可能很有用。 – svick

相关问题