我正在将我的一些代码重构为一个服务,并且我将一直向下滚动到我的EmailService的Send()方法。我正要用SendAsync()替换Send(),并注意到了额外的回调参数。我们决定在这里更深入地研究和阅读它:
我认为这将是有用的设置日志到数据库中的错误:
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(),并具有以下内容:
private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
// Do nothing
}然后,我们在电子邮件中获得异步非阻塞的好处,并将基础设施设置为在需要时进行回调。但我们目前并没有被迫添加任何功能性。
我是不是想通了。我想我会采用这种方法。
发布于 2020-09-17 06:32:53
我找到了
SendMailAsync()方法的效果最好。您不需要回调或用户令牌。易于实现和非阻塞。
https://stackoverflow.com/questions/63911057
复制相似问题