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)

そして、この2つの組み合わせ:

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

1 に答える 1

1

最初のオプションは、並列化とエラーの伝播など、必要なすべてのことを実行するため、一般的に適切です。オプション2および3には、エラーを伝播するための追加の手段が必要です。

他のタスクでそれらを構成できるようにタスクが必要な場合は、オプション2が有効になる可能性があります。

オプション3を使用するケースは実際には見当たりません。

于 2013-01-14T20:19:40.370 に答える