ReSharper重構了一個foreach循環我不得不這樣做。我想通過委託的BeginInvoke的產卵一堆線程使用不同的參數,存儲在一個列表,以及存儲IAsyncResults一個集合中:通過LINQ Select調用錯誤代碼產生新線程?
var asyncResults = mylist.Select(x => myDelegate.BeginInvoke(x, null, null));
我的本能反應是,這是不是一個好的做法。 BeginInvoke會導致產生新線程的副作用,並且傳遞給Select的函數不應導致副作用。
或者它可以,因爲我沒有改變調用線程中的任何東西?
在你問自己「這是一個好習慣嗎?」之前問自己「這個代碼是否實現了我所描述的行爲?」它不是;這段代碼只是創建一個查詢對象。您創建了一個對象,意思是「我是從該列表中產生一系列異步結果的查詢」。 *正在*該查詢不會導致查詢*執行*。如果你想執行查詢並將結果存儲在一個集合中,你將不得不編寫更多的代碼。 – 2012-04-17 00:53:34
它本身並沒有做任何事情,但在某些情況下它可能是合適的。然而,當你調用BeginInvoke時,我猜你通常希望線程在那裏和那裏開始,所以在這種情況下,LINQ查詢與foreach循環完全不同。 – Jimmeh 2012-04-17 17:13:56