【发布时间】:2018-03-13 07:52:36
【问题描述】:
我有一个网络服务 .Net core2,它具有某些发送电子邮件的方法。我使用smtpclient.sendemailasync 可以正常工作。
public async Task<bool> SendEmailAsync(MailMessage email)
{
try
{
if (string.IsNullOrWhiteSpace(emailFrom)) email.From = new MailAddress(emailFrom);
using (SmtpClient client = getSMTPClientInstance())
{
await client.SendMailAsync(email);
}
return true;
}
catch (Exception ex)
{
Log.Error(ex, "Error sending email in EmailService.SendEmailAsync");
return false;
}
}
唯一的问题是某些 SMTP 服务器响应时间过长。我想设置电子邮件,将其排队并返回而不等待结果。
仅使用未等待的异步有两个原因;
在asp中继续请求上下文之外的方法是不可靠的
我需要访问我的实体框架的数据库上下文来编写日志
我必须允许外部或内部 SMTP(我的客户指定),因此不可能使用集合文件夹 - 至少在没有管理它的服务的情况下是不可能的。
我怎样才能做到这一点?我需要编写一个管理这个的服务吗?如果是这样,我将如何在我的 .Net Core 应用程序中执行此操作,请记住该服务还需要访问 EF 上下文以写入日志
更新
.NetCore DI 中提供了专门用于此的管道。请参阅下面我的附加答案。使用 IServiceScopeFactory
【问题讨论】:
标签: entity-framework async-await asp.net-core-webapi