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

相關問題