首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SmtpClient.SendAsync()真的比SmtpClient.Send()快吗

SmtpClient.SendAsync()真的比SmtpClient.Send()快吗
EN

Stack Overflow用户
提问于 2020-09-16 07:16:55
回答 1查看 39关注 0票数 0

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

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

我认为这将是有用的设置日志到数据库中的错误:

代码语言:javascript
复制
if (e.Error != null)
{
    Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
    // TODO: Log error to DB
}

e.Cancel永远不会发生。

我唯一关心的是记录错误和发送的消息。因为示例控制台程序显示消息已发送,即使我输入了错误的端口,消息也无法通过。它只会报告ArgumentNullException或InvalidOperationException的错误。

因此发送的日志消息可能是错误的。但是,由于它返回的是void而不是一个成功的bool,因此无法确定消息是否有效。我想这比把Send()放在try/catch中要好,后者会更昂贵。

一种替代方法是将回调设置为一个空的SendCompletedCallback(),并具有以下内容:

代码语言:javascript
复制
private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
    // Do nothing
}

然后,我们在电子邮件中获得异步非阻塞的好处,并将基础设施设置为在需要时进行回调。但我们目前并没有被迫添加任何功能性。

我是不是想通了。我想我会采用这种方法。

EN

回答 1

Stack Overflow用户

发布于 2020-09-17 06:32:53

我找到了

代码语言:javascript
复制
SendMailAsync()

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63911057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档