所以我只是在c#中用Task類做一些實驗,發生下面的事情。在同一個對象上操作的幾個任務
這裏是我稱之爲
static async Task<List<int>> GenerateList(long size, int numOfTasks)
{
var nums = new List<int>();
Task[] tasks = new Task[numOfTasks];
for (int i = 0; i < numOfTasks; i++)
{
tasks[i] = Task.Run(() => nums.Add(Rand.Nex())); // Rand is a ThreadLocal<Random>
}
for (long i = 0; i < size; i += numOfTasks)
{
await Task.WhenAll(tasks);
}
return nums;
}
我這樣調用
var nums = GenerateList(100000000, 10).Result;
此方法之前,我用任務產生了像4-5秒。如果我通過10-20個任務執行此方法後,生成時間降低到1,8-2,2秒,但通過該方法返回的List
具有numOfTask
個元素所以在這種情況下返回十個數的List
。可能是我寫錯了什麼。這裏可能是什麼問題。或者可能有另一種解決方案。我希望有很多任務可以在同一個列表中添加數字,這樣生成時間至少要快兩倍。在此先感謝
我想要做的是有假設10的任務,將號碼添加到列表和運行它們秒任務 – Dimitri
我可以運行任務數組而無需在循環中獨特地運行它們中的每一個? – Dimitri
這不起作用,它會創建未啓動的「任務」,然後永遠不會啓動它們。即使你這樣做,你也只能啓動一次「Task」。 – svick