我注意到,当await一个方法在我正在触发并且忘记应用程序的方法中时,它只会让它尽可能远,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); }}这永远不会超过这条线await EmailSenderAsync(to,body);,只会emails发送第一封电子邮件。EmailSenderAsync是外部代码,所以我无法进入它。添加一个等待SendAsync(emails)将使一切正常......但它不是火和忘记。我认识到这可能不是针对这种特殊情况的最佳解决方案。我更想了解为什么会失败以及您可以使用什么模式async在火灾中创建功能并忘记按预期工作。
2 回答
Cats萌萌
TA贡献1805条经验 获得超9个赞
前几天我遇到了类似的问题。我所做的是将我的await方法声明为任务,然后将它们传递给Task.WhenAll.
试试这个:
var taskEmailSendAsync = EmailSenderAsync(to, body);
var taskDelay = Task.Delay(3000);
await Task.WhenAll(taskEmailSenderAsync, taskDelay)
- 2 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消