2017-03-01 13 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サーバのリソースを取り込まないようにします。通常は、可能な限り多くの要求を処理するために非常にスケーラブルであることが必要です。あなたがこれを達成できる方法の1つは、電子メールデータをサービスバスキューに投げ込み、次にワーカーサーバがキューから離れてできるだけ処理してくれるようにすることです。これにより、即座にAPIから応答することができます。 –

+0

素晴らしい、非常に有用なアドバイスおかげでみんな! – Baconbeastnz

関連する問題