[英]Why isn't SmtpClient.SendAsync async?
參考: https : //github.com/dotnet/corefx/blob/master/src/System.Net.Mail/src/System/Net/Mail/SmtpClient.cs#L583
此方法標記為異步,但返回void。 它實際上是異步的,並且不是基於任務的嗎? 如果是這樣,它如何異步?
在官方文檔頁面上有關於此方法的特定問題的一些信息。
若要在發送電子郵件或取消操作時接收通知,請將事件處理程序添加到
SendCompleted
事件中。
這意味着方法沒有阻塞,但不能等待,因為它對TPL一無所知。 您應該改為訂閱SendCompleted
事件。 通過我提供的鏈接檢查代碼示例,以查看可能的使用場景。
盡管SendMailAsync
是通過基於任務的異步模式實現的,可能應該代替使用它。
如果您閱讀該代碼,則可能忽略了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
開始運行,我看不到任何等待或繼續) (至少,如果我很好地閱讀了代碼,我並沒有在那兒鑽得太深)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.