为什么不是 SmtpClient.SendAsync 异步?

wil*_*ill 1 c# asynchronous task task-parallel-library async-await

参考:https : //github.com/dotnet/corefx/blob/master/src/System.Net.Mail/src/System/Net/Mail/SmtpClient.cs#L583

此方法被标记为异步但返回无效。它实际上是异步的,只是不是基于任务的?如果是这样,它是如何异步的?

Vla*_*lav 5

在官方文档页面上有一些关于此方法的特定问题的信息。

要在发送电子邮件或取消操作时接收通知,请向事件添加事件处理程序SendCompleted

这意味着方法不是阻塞的,但不能等待,因为它对 TPL 一无所知。您应该SendCompleted改为订阅事件。通过我提供的链接检查代码示例以查看可能的使用场景。

WhileSendMailAsync是用基于任务的异步模式实现的,可能应该改用。