簡體   English   中英

我應該為此用例使用任務或線程嗎?

[英]Should I use Tasks or Threads for this use case

我仍然掌握了.NET 4多線程庫,因此我不確定它們是否比低級解決方案更有用。

我有一個消息的BlockingCollection需要發送到某個HTTP服務端點。 通常我的解決方案是創建一個無限循環函數

void DoWork()
{
    while(true)
    {
        var message = collection.Take();
        SendMessage();
    }
}

啟動X個Thread()對象來處理循環。 多個線程占用等待HTTP響應所花費的時間,然后我將分析和調整性能以確定要使用的正確線程數。

這更適合任務嗎?

在這種情況下使用Task或Thread時沒有太大區別。 兩者都會做同樣的事情。

我寧願使用GetConsumingEnumerable來編寫它,以便在沒有元素時將其輸出。

void DoWork()
{
    foreach(var message in collection.GetConsumingEnumerable())
    {
        SendMessage();
    }
}

我不打算就你應該使用哪個提出我的意見,但我會提供一些指導方針。

這篇文章: https//stackoverflow.com/a/4130204/3317555提供了一些非常好的指導。 由於您正熟悉.NET 4,因此您可能希望嘗試兩種方式,並在功能方面以及在代碼中的外觀方面更好地了解哪種風格。

編輯:我會說這個, 不要使用Parallel。

從MSDN開始 - “從.NET Framework 4開始,TPL是編寫多線程和並行代碼的首選方式。”

http://msdn.microsoft.com/en-us/library/dd460717.aspx

我發現Parallel.ForEach()擅長這樣的任務。 它優化了線程數。 它考慮了系統中的核心數以及線程正在做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM