1 回答

TA貢獻1876條經驗 獲得超6個贊
有很多方法可以做到這一點,但我可能會使用一些提供更高級別抽象的庫或框架,例如 TPL 數據流。
這比構建您自己的緩沖機制要容易得多。下面是一個非常簡單的示例,但您可以對其進行不同的配置,并使用該庫執行更多操作。在下面的示例中,我沒有對它們進行批處理,但我確保同時處理的任務不超過 10 個。
我有一組 100 個任務需要以任意順序運行。將它們全部放入往往Task.WhenAll()會使后端超載,這是我無法控制的。
我想一次運行 n 個任務,每個任務完成后,然后運行下一組。我編寫了這段代碼,但是在任務運行后,“控制臺(正在運行...”)被打印到屏幕上,這讓我認為所有任務都正在運行。
如何強制系統真正“等待”每組任務?
//Run some X at a time
int howManytoRunAtATimeSoWeDontOverload = 4;
for(int i = 0; i < tasks.Count; i++)
{
? ? var startIndex = howManytoRunAtATimeSoWeDontOverload * i;
? ? Console.WriteLine($"Running {startIndex} to {startIndex+ howManytoRunAtATimeSoWeDontOverload}");
? ? var toDo = tasks.Skip(startIndex).Take(howManytoRunAtATimeSoWeDontOverload).ToArray();
? ? if (toDo.Length == 0) break;
? ? await Task.WhenAll(toDo);
}
屏幕輸出:
- 1 回答
- 0 關注
- 120 瀏覽
添加回答
舉報