此方法标记为异步但返回void。它实际上是异步的,而且不是基于任务的吗?如果是这样,它是如何异步的?
答案 0 :(得分:3)
在官方docs页面上有关于此方法的特定问题的一些信息。
要在发送电子邮件或取消操作时收到通知,请向
** !ENTRY org.eclipse.equinox.launcher 4 0 2018-05-19 13:40:07.262 !MESSAGE Exception launching the Eclipse Platform: !STACK java.lang.ClassNotFoundException: org.eclipse.core.runtime.adaptor.EclipseStarter at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:626) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) at org.eclipse.equinox.launcher.Main.run(Main.java:1438) at org.eclipse.equinox.launcher.Main.main(Main.java:1414)**
事件添加事件处理程序。
这意味着方法不会阻塞,但是无法等待,因为它对TPL一无所知。您应该订阅SendCompleted
事件。
通过提供的链接检查代码示例,以查看可能的使用方案。
虽然使用基于任务的异步模式实现SendMailAsync
,但可能应该使用它。
答案 1 :(得分:0)
如果您阅读该代码,您可能会忽略AsyncOpManager - 请参阅https://github.com/dotnet/corefx/blob/master/src/System.Net.Mail/src/System/Net/Mail/SmtpClient.cs#L662:)
然而,事实上,在下面的switch
中,我们看到:
message.Send(_writer, true, allowUnicode)
和writer.Close
和_transport.ReleaseConnection
)_transport.BeginGetConnection
开始运行,我看不到任何等待或继续)(至少如果我读好代码,那我就没有深入挖掘)