2017-04-19 69 views
0

我的問題是關於組合PLINQ和yield關鍵字的結果。如果我這樣寫:Collection.AsParallel()+ yield return

//Some stuff here 
foreach (var x in collection.AsParallel()) 
{ 
    yield return new CustomObject 
    { 
     property1 = //Large calculations here 
     property2 = x.Name 
     //... etc. 
    }; 
} 

我真的想要什麼?我想初始化不同線程中的對象,但是當它們中的一些需要時返回它們。
在此先感謝!

+0

不是。在我的情況下,一切正常,但問題是'如何'? – user3818229

回答

3

AsParallel只是啓用並行版本的LINQ操作。它實際上並不是確實是

因此,您的代碼在一小部分額外開銷之外,在功能上與您完全省略AsParallel沒有區別。

如果您想要實際上能夠並行執行CustomObject實例的構建,並且想要使用PLINQ來實現它(當然,還有許多其他工具可用於並行創建對象) ,那麼您需要使用Select將一種類型的序列轉換爲另一種類型的序列,而不是使用自己的自定義迭代器塊。

+0

謝謝你解釋!讓我問這個庫的連接問題。如果我這樣做:.AsParallel()。選擇(x => {var t = _db./ /有些工作與數據庫上下文;返回新...})我有任何連接的問題嗎?我的意思是「第二個線程開始他的工作之前,第一個關閉執行在同一個上下文中」 – user3818229

+0

@ user3818229我會高度懷疑任何數據庫提供者都會支持這一點,但它當然取決於提供者。 – Servy

相關問題