【发布时间】:2022-08-17 05:04:20
【问题描述】:
我有一个 APS.NET Core 5 Web API:
我有这个:
await _mailSender.SendMailAsync(entity.Id);
但是,我不想等待电子邮件发件人返回确定为客户。 我想继续执行代码并在后台发送电子邮件。
我怎样才能做到这一点?
-
您可以稍后在代码中等待它。但是要小心即发即弃,例如一个依赖被清理。
-
@Jeppe 抱歉,但我不明白。
-
await从这个线程的角度来看,在继续之前等待电子邮件发送,例如完成 api 请求。删除await,它会立即继续完成api-request。但是注入的服务有生命周期——所以如果_mailSender依赖于一个作用域服务,我认为在你完成之前这种依赖就有被清理的风险。您可以创建一个EmailQueue单例,您可以在其上将任务排入队列。然后它可以维护自己的依赖生命周期。 -
@Jeppe 我现在明白了!你能给我发一个 EmailQueue 单例示例吗?
-
仅供参考,当您将电子邮件提交到他们的 API 时,SendGrid 会将您的电子邮件排队,然后返回“Ok”。不久之后 SendGrid 将实际发送电子邮件。因此,您并不是真的在等待发送电子邮件。不确定这是否会改变您对等待的想法,但想确保您知道!
标签: asp.net-core asp.net-core-webapi sendgrid