我注意到,當(dāng)await一個方法在我正在觸發(fā)并且忘記應(yīng)用程序的方法中時,它只會讓它盡可能遠(yuǎn),await然后它會像它擊中return. 在我目前正在查看的簡化版本中,您可能有:public void DoTheThing() { ... Task fireAndForget = SendAsync(emails);}public async Task SendAsync(List<Email> emails) { foreach (var email in emails) { var to = email.to; var body = email.body; await EmailSenderAsync(to,body); await Task.Delay(3000); }}這永遠(yuǎn)不會超過這條線await EmailSenderAsync(to,body);,只會emails發(fā)送第一封電子郵件。EmailSenderAsync是外部代碼,所以我無法進(jìn)入它。添加一個等待SendAsync(emails)將使一切正常......但它不是火和忘記。我認(rèn)識到這可能不是針對這種特殊情況的最佳解決方案。我更想了解為什么會失敗以及您可以使用什么模式async在火災(zāi)中創(chuàng)建功能并忘記按預(yù)期工作。
2 回答

Cats萌萌
TA貢獻(xiàn)1805條經(jīng)驗 獲得超9個贊
前幾天我遇到了類似的問題。我所做的是將我的await方法聲明為任務(wù),然后將它們傳遞給Task.WhenAll.
試試這個:
var taskEmailSendAsync = EmailSenderAsync(to, body);
var taskDelay = Task.Delay(3000);
await Task.WhenAll(taskEmailSenderAsync, taskDelay)
- 2 回答
- 0 關(guān)注
- 137 瀏覽
添加回答
舉報
0/150
提交
取消