2017-03-01 68 views
0

電子郵件發送時間過長(有時高達7-8)秒。WebApi如何在返回用戶響應後發送異步電子郵件?

我想發送迴應給我的客戶,而不必等待電子郵件發送。這可能嗎?

public async Task<IHttpActionResult> Action() 
{ 
    //Do something 
    await email.sendAsync(); //Can take up to 10 seconds... 
    return Ok(); 
} 

我可以刪除的await,但我顯然得到了An asynchronous module or handler completed while an asynchronous operation was still pending

我怎樣才能做到這一點?

回答

2

理想情況下,您希望將此工作轉移到其他進程,也許是一個隊列,然後讓某些訂戶處理該隊列以發送電子郵件,但這是很多工作,而且我們生活在現實世界中。

您可以使用

HostingEnvironment.QueueBackgroundWorkItem(ct => email.sendAsync()); 

得到的東西相當可靠的啓動和運行。

+2

這是正確的建議。要擴展,通常不希望通過在後臺線程上工作來佔用Web服務器資源。通常,您希望它們能夠非常靈活地處理儘可能多的請求。一種方法是將電子郵件數據放入服務總線隊列中,然後讓工作服務器將隊列中的東西從隊列中彈出並儘可能進行處理。這樣您就可以立即響應您的API。 –

+0

真棒,非常有益的建議謝謝你們! – Baconbeastnz

相關問題