2017-09-20 25 views
0

我想使用smtp clinet發送電子郵件。此操作應該在其他線程中執行以重定向到索引頁面。到目前爲止,我已經編寫了下面的代碼。以異步方式發送電子郵件

private async Task<int> SendEmail(System.Net.Mail.SmtpClient smtp, System.Net.Mail.MailMessage m) 
{ 
    smtp.Send(m); 
    return 0; 
} 

以這種方式在其他異步任務方法中調用此方法。

await SendEmail(smtp, m); 

這個建議是否正確?

+0

標有'async'的方法也應該使用'await'執行'async'動作。如果不是這種情況,那麼你不應該使用'async',並且如果它也不返回一個'Task' /'任務',那麼刪除它,只是讓它返回一個int。最後,如果它*是一個異步方法,如果返回類型是'void',則返回'Task'。 – Igor

+0

很難說什麼是「正確的」,而不知道你想要做什麼以及爲什麼。在這個代碼中沒有任何東西啓動一個線程,'Send'方法不是異步的,所以我不確定你現在認爲你在做什麼。 – kai

+1

沒有任何關於創建線程的'async' /'await'。除非你「等待」創建線程的東西,否則不會創建新線程。 – Enigmativity

回答

1

可以SendEmail實施更改爲:

private async Task<int> SendEmail(System.Net.Mail.SmtpClient smtp, 
System.Net.Mail.MailMessage m) 
{ 
    await smtp.SendAsync(m).ConfigureAwait(false); 
    return 0; 
} 

另請參閱以下網址: https://msdn.microsoft.com/en-us/magazine/jj991977.aspx

異步一路
不要混用阻塞和異步代碼。

配置上下文
如果可以,請使用ConfigureAwait(false)。