我注意到,当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在火灾中创建功能并忘记按预期工作。
Cats萌萌
相关分类