電子メールを送信する特定のメソッドを持つWebサービス.Netコア2があります。私はsmtpclient.sendemailasync
を使ってうまく動作しています。.NetコアWebサービスを待たずに非同期電子メールを送信する
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サーバーが応答に時間がかかりすぎることです。私は電子メールを設定し、キューに入れて、結果を待たずに戻りたいと思う。
ただunawaited非同期を使用するのは2つの理由からです。
私が持っている私は、ログ
を書くために私のエンティティフレームワークのデータベースコンテキストにアクセスする必要がASPで要求コンテキスト外で
の方法を継続することが信頼できるものではありません(私のクライアントが指定する)外部または内部のSMTPを許可するので、コレクションフォルダは可能ではありません。少なくとも、それを管理するサービスがないわけではありません。
これをどのように達成できますか?これを管理するサービスを書く必要がありますか?もしそうなら、どのように私は私のネットコアアプリケーションの内部で、サービスもログ
UPDATE
を書くためにEFコンテキストにアクセスする必要があることを念頭に置いては可能な配管が.NetCoreであることを行うだろう特にこれはDIです。以下の私の追加の答えを参照してください。 IServiceScopeFactoryを使用する