微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SmtpClient.SendAsync真的比SmtpClient.Send快吗

如何解决SmtpClient.SendAsync真的比SmtpClient.Send快吗

我将一些代码重构到服务中,并且将一直滚动到我的EmailService的Send()方法。 我正要用SendAsync()替换Send()并注意到额外的回调参数。 决定深入研究并在这里深入了解它:

https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient.sendasync?view=netcore-3.1#definition

我认为这对于将错误设置为数据库记录很有用:

if (e.Error != null)
{
    Console.WriteLine("[{0}] {1}",token,e.Error.ToString());
    // Todo: Log error to DB
}

e。取消将永远不会发生。

我唯一需要担心的是记录错误和发送消息。 因为示例控制台程序会说消息已发送,即使我说的是端口错误,消息也不会通过。 唯一会报告错误的是ArgumentNullException或InvalidOperationException。

因此发送的日志记录消息可能是错误的。 但是由于消息返回void而不是成功布尔值,因此无法检查消息是否通过。我想这比将Send()放入try / catch会更好,后者会更昂贵。

一种替代方法是将回调设置为空的SendCompletedCallback()并具有以下功能

private static void SendCompletedCallback(object sender,AsyncCompletedEventArgs e)
{
    // Do nothing
}

然后,我们在电子邮件中获得了Async nonblocking的优势,并在需要时为回调建立了基础结构。 但是我们目前不被迫增加任何功能

在这里一直在思考这个问题。 我想我会采用这种方法

解决方法

我找到了

SendMailAsync()

方法效果最好。 您不需要回调或用户令牌。 易于实现且无阻塞。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。