语境
在 ASP.NET Core 应用程序中,我想执行一个需要 5 秒的操作(比如发送电子邮件)。我确实知道 async/await 及其在 ASP.NET Core 中的用途,但是我不想等待操作结束,而是想立即返回给客户端。
问题
因此,无论是自制软件,还是 Hangfire 的,它都有点像 Fire and ForgetBackgroundJob.Enqueue<IEmailSender>(x => x.Send("hangfire@example.com"));
假设我有一些更复杂的方法,注入了 ILogger 和其他东西,我想触发并忘记该方法。该方法中有错误处理和日志记录。(注意:对于 Hangfire 来说不是必需的,这个问题与后台工作人员的实现方式无关)。我的问题是该方法将完全脱离上下文运行,内部可能没有任何作用,没有 HttpContext(我的意思是 HttpContextAccessor 会给出 null 等)所以没有用户,没有会话等。
问题
如何正确解决这个特定的电子邮件发送问题?没有人想要等待 5 秒的响应,同时没有人想要抛出和发送电子邮件,如果发送操作返回错误,甚至不记录......