1 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果未等待,則操作幾乎肯定會(huì)在實(shí)際任務(wù)完成之前返回。當(dāng)操作超出范圍時(shí),它會(huì)隨之獲取其所有作用域變量,包括從 post 正文綁定的實(shí)例。這將導(dǎo)致寫入被過早取消,留下一個(gè)損壞的文件(因?yàn)榱髟趯懭脒^程中被破壞)。將引發(fā)異常,但由于您正在新線程中運(yùn)行,因此它不會(huì)通過請(qǐng)求管道冒泡,并且會(huì)被有效地吞噬。Task.RunSaveFileIFormFile
長(zhǎng)短,等待您的電話。但是,一旦你這樣做了,那么在這里使用實(shí)際上就沒有意義了。所以,你最好完全擺脫它。相反,只需啟動(dòng)所有任務(wù),然后等待:Task.RunTask.RunTask.WhenAll
var tasks = new List<Task>();
foreach (var item in Images)
{
// item.File is IFormFile array
tasks.Add(SaveFile(item.FileSavePath, item.File));
}
await Task.WhenAll(tasks);
任務(wù)返回?zé)幔蛞褑?dòng)。因此,等待在 foreach 中保存每個(gè)項(xiàng)目將導(dǎo)致任務(wù)被串行處理。只需將它們保存到列表中,即可使它們?nèi)繂?dòng)并基本并行運(yùn)行。然后,您只需等待列表中所有任務(wù)的完成,以防止操作返回,直到工作完成。
- 1 回答
- 0 關(guān)注
- 79 瀏覽
添加回答
舉報(bào)