1 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個贊
有很多方法可以做到這一點(diǎn),但我可能會使用一些提供更高級別抽象的庫或框架,例如 TPL 數(shù)據(jù)流。
這比構(gòu)建您自己的緩沖機(jī)制要容易得多。下面是一個非常簡單的示例,但您可以對其進(jìn)行不同的配置,并使用該庫執(zhí)行更多操作。在下面的示例中,我沒有對它們進(jìn)行批處理,但我確保同時處理的任務(wù)不超過 10 個。
我有一組 100 個任務(wù)需要以任意順序運(yùn)行。將它們?nèi)糠湃胪鵗ask.WhenAll()會使后端超載,這是我無法控制的。
我想一次運(yùn)行 n 個任務(wù),每個任務(wù)完成后,然后運(yùn)行下一組。我編寫了這段代碼,但是在任務(wù)運(yùn)行后,“控制臺(正在運(yùn)行...”)被打印到屏幕上,這讓我認(rèn)為所有任務(wù)都正在運(yùn)行。
如何強(qiáng)制系統(tǒng)真正“等待”每組任務(wù)?
//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 關(guān)注
- 131 瀏覽
添加回答
舉報