为了账号安全,请及时绑定邮箱和手机立即绑定

在即发即忘的方法中等待

在即发即忘的方法中等待

C#
翻翻过去那场雪 2021-07-01 15:53:56
我注意到,当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)


查看完整回答
反对 回复 2021-07-03
  • 2 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信