我有100個價值觀如何在一個循環中
我想產卵5個線程來處理列表創建一批任務的20各
我的代碼基本上是
for (int i = 0; i<5; i++)
{
Task.Run(() => {
myMethod(myList.Skip(i * 20).Take(20)));
});
}
顯然,因爲這關閉了我的價值,它可以完全搞砸了。我已經嘗試過所有我能想到的事情,以便在任務宣佈時獲得價值,但我沒有運氣。即使將Task.Run的第一行設置爲var localVariable = i;
以捕獲它也不起作用,它將運行該方法,並且我每次都是5。
我該怎麼做,大概我想通過傳遞我的值來創建任務,因此它從不會看到函數的外部,但我無法弄清楚如何做到這一點。
任何想法?
是的,這是行不通的。我假設,因爲循環速度非常快,所以它甚至可以運行5次Task.Run,甚至有機會運行一次。 – NibblyPig
@SLC:「不起作用」不給我們提供任何信息,但它確實可以運行5個任務,其中一個將調用Skip(0),其中一個將調用Skip (20)',其中一個會調用'Skip(40)'等。正如我在答案中所說的,如果這個代碼不起作用,那麼你需要在其他地方尋找這個問題。 (我們沒有足夠的上下文來進一步幫助......) –
試着在'myMethod'中放置一個斷點並檢查傳入的集合。每次都得到一組不同的20條記錄,或者只有相同的'myList'中最後20條記錄的集合? –