當我需要一些并行處理時,我通常會這樣做:static void Main(string[] args){ var tasks = new List<Task>(); var toProcess = new List<string>{"dog", "cat", "whale", "etc"}; toProcess.ForEach(s => tasks.Add(CanRunAsync(s))); Task.WaitAll(tasks.ToArray());}private static async Task CanRunAsync(string item){ // simulate some work await Task.Delay(10000);}我遇到過這樣的情況,它沒有并行處理項目,不得不使用Task.Run它來強制它在不同的線程上運行。我錯過了什么?
1 回答

慕的地8271018
TA貢獻1796條經(jīng)驗 獲得超4個贊
Task
意思是“需要做的事情,可能已經(jīng)完成,可能正在并行線程上執(zhí)行,或者可能取決于進程外數(shù)據(jù)(套接字等),或者可能只是......連接到交換機某處說“完成”” - 它與線程幾乎沒有關(guān)系,除了:如果你安排一個延續(xù)(又名await
),那么不知何故需要回到一個線程來觸發(fā),但這是如何發(fā)生的以及那是什么手段取決于創(chuàng)建的任何代碼并擁有該任務(wù)。
注意:并行性可以表示為多個任務(wù)(如果您愿意的話),但多個任務(wù)并不意味著并行性。
在您的情況下:這完全取決于做什么CanRun
或是什么-我們不知道。它也應(yīng)該被稱為CanRunAsync
.
- 1 回答
- 0 關(guān)注
- 258 瀏覽
添加回答
舉報
0/150
提交
取消