2012-03-15 22 views
4

我讀過有關任務的好處Difference between Task (System.Threading.Task) and Thread我應該用「Task.Factory.StartNew」替換所有「新線程」嗎?

而且MSDN說:「......在.NET Framework 4中,任務是編寫多線程,異步和並行代碼的首選API。」

現在我的程序包含從UDP接收組播數據這樣的代碼:

thread = new Thread(WhileTrueFunctionToReceiveDataFromUdp); 
..... 
thread.Start(); 

我有幾個這樣的線程,每個插座。 我是否更好地將此代碼替換爲使用Task

+0

一個線程是足夠通常是不好的。每個套接字的許多線程並不是朝着正確方向邁出的一步,而使用線程池而不是自己的線程可能會更糟糕。 – Jon 2012-03-15 20:21:30

+2

當然不是。永遠不要替換有效的代碼。特別是線程代碼。任務不會改變線程的行爲,它只是使寫這樣的代碼更容易。 – 2012-03-15 20:22:19

+0

@Jon我應該用什麼接收來自多個套接字的數據呢? – javapowered 2012-03-15 20:29:18

回答

2

這取決於你在做什麼 - 如果你不打算使用的任何新功能Task和TPL,和您現有的代碼工作,沒有理由改變。

然而,Task有許多優點 - 特別是要在線程池中的線程運行並返回結果的操作。

而且 - 因爲你使用「線程每個插座」,則可能需要更長的使用壽命線程。因此,如果你切換到Task.Factory.StartNew,你可能要指定的任務應該是LongRunning否則你會風使用大量線程池的線程,爲您的插座數據(使用默認的調度)。

+0

並且沒有理由讓線程考慮到我反正現在改變這個代碼? 'Tasks'應該快.... – javapowered 2012-03-15 20:22:53

+0

@javapowered:'Tasks'並不快,但有建在'.NET Framework'巧妙安排機制。哪個**可以使他們更快。 – Tigran 2012-03-15 20:28:31

+0

@javapowered它們不會更快 - 它只是一個更好的編程模型。底下,他們使用ThreadPool線程(或正常的線程,與LongRunning指定) – 2012-03-15 20:30:24

1

不要在已經工作,並將工作的代碼(至少根據微軟)改變任何東西。更改它只是像的原因:

  • 您想使用Tasks

  • 個人的研究提供了新的功能。

請記住,在操作系統級別,它們基本上會結束到相同的操作系統內核對象。

希望這會有所幫助。每個插座

+2

我有代碼不起作用。 – javapowered 2012-03-15 20:25:40

+0

@javapowered:所以如果原因實際上存在'Thread'類型的對象,請將其更改爲'Tasks'。因爲你已經閱讀過它,我想從你自己提供的鏈接中,他們更加巧妙地將併發管理考慮在主機上的CPU上。 – Tigran 2012-03-15 20:27:37

相關問題