2014-03-04 17 views
0

我真的很喜歡TPL。只需撥打Task.Factory.StartNew()而不用擔心任何事情,是相當了不起的。Multiple Task.Factory的

但是,是否有可能有多個工廠在同一線程上運行? 基本上,我想有兩個不同的隊列,執行不同類型的任務。 一個隊列處理類型A的任務,而第二個隊列處理B類任務。

如果隊列A無關,它應該忽略隊列B中的任務,反之亦然。

這是可以做到的,沒有讓我自己的隊列,或工廠運行多個線程?

爲了澄清什麼,我想做的事情。

我從網絡設備讀取數據。我想用這些數據做兩件事情,完全相互獨立。

  1. 我要登錄到數據庫。
  2. 我想通過網絡發送到其他設備。

有時數據庫日誌需要一段時間,我不希望網絡發送因此而延遲。

+0

[StartNew是危險的(http://blog.stephencleary.com/2013/08/startnew-is-dangerous.html) –

+0

您將需要一個自定義的調度。一個'工廠'只是建立「任務」 - 一個調度程序實際上將它排隊。你想要達到什麼目的?也許有更直接的方式來實現它。 – Gusdor

+0

@SriramSakthivel'Task.Run'不存在.NET 4.5 ... – Gusdor

回答

0

隊列自行定義線程池如果你使用.NET 4.0:

  • LimitedConcurrencyLevelTaskScheduler(與1併發級別;看到here

如果您使用.NET 4.5:

  • ConcurrentExclusiveSchedulerPair(僅從該對中取出專用調度程序;請參閱here

創建兩個調度程序並將它們傳遞給相應的StartNew。或者用這些schdulers創建兩個TaskFactories並使用它們來創建和啓動任務。

0

您可以使用線程