我需要能夠異步進行所有電子郵件調用。我們如何完成這樣的事情。因此,讓我們假設我有一個方法A發送電子郵件異步方法
public void A() {
SendEmail();
}
public void SendEmail() { }
如何使此SendEmail()方法異步?我們只是做類似
public async void SendEmail() { }
謝謝。
我需要能夠異步進行所有電子郵件調用。我們如何完成這樣的事情。因此,讓我們假設我有一個方法A發送電子郵件異步方法
public void A() {
SendEmail();
}
public void SendEmail() { }
如何使此SendEmail()方法異步?我們只是做類似
public async void SendEmail() { }
謝謝。
創建一個異步包裝
public Task void SendEmailAsyn() {
return Task.Factory.StartNew(() => { SendEmail(); });
}
我們推薦返回Task,所以我返回它,而不是返回void:
async Task SendEmail()
{
//Do Something
}
任務是最好的,因爲你要提供你的來電者(也許你自己),以等待任務比如發送電子郵件。
同樣的任務可以用別的東西來續:
await SendEmail().ContinueWith(SendNotification);
有做異步的電子郵件,並對其進行管理的工具更簡單的方法是建立直接進入操作系統。我提供了一個類似的答案來回答一個稍微不同的問題:https://stackoverflow.com/a/30768906/964043
基本上,你可以使用System.Net.Mail.SmtpClient迅速排隊它只是通過設置寫入磁盤在後臺打印文件夾的郵件DeliveryMethod到PickupDirectoryFromIis。在運行的服務器上,您只需要在同一臺計算機上設置並配置Microsoft SMTP服務,以指向一個有效的SMTP服務器,它將爲您轉發消息。這意味着您已經擁有一個完全線程化和高性能的方法,可以異步發送電子郵件,而無需親自編寫任何代碼。適用於從Web應用程序,Web服務或任何其他基於服務器的應用程序發送消息。
要異步調用SendEmail,請使用Task.Factory.StartNew(()=> SendEmail())。 –
完美。謝謝。 – JohnnyCage