2017-05-10 15 views
5

私はこれを行う場合:MailMessage.SendAsyncを待つ方法

public async Task<SendEmailServiceResponse> ExecuteAsync(SendEmailServiceRequest request) 
    { 
     .... 
     var response = new SendEmailServiceResponse(); 
     await client.SendAsync(mail, null); // Has await 
     response.success = true; 
     return response; 
    } 

をその後、私はこれを取得:

'無効' を待つことはできませんが、私はこれを行う場合:

public async Task<SendEmailServiceResponse> ExecuteAsync(SendEmailServiceRequest request) 
    { 
     .... 
     var response = new SendEmailServiceResponse(); 
     client.SendAsync(mail, null); // No Await 
     response.success = true; 
     return response; 
    } 

私は入手:

非同期メソッドには「await」がなく、同期して実行されます。

私は明らかに何かが不足しています。

+2

を待望することができ、SendAsyncではありませんタスクを返さないので、非同期メソッド(非同期\ awaitの観点から)。 – Evk

+1

短い答え..あなたはしません。これはAPIの文脈では同期的な方法です。 – Mardoxx

+0

電子メールを非同期で送信することはできません。 –

答えて

5

他の人が指摘したように、SendAsyncは少し誤解を招くことがあります。 voidを返し、Taskを返しません。あなたがawaitしたい場合は、この方法

SendMailAsync(MailMessage message) 

または

SendMailAsync(string from, string recipients, string subject, string body) 

を使用する必要があります送信メールコールはこれらの両方がTaskを返すと、その名前にもかかわらず

+0

これは正解ではありません! '非同期メソッドには 'await'がなく、同期的に実行されます.'メソッドは待っている呼び出しを持っていないが、SendAsync呼び出しの問題ではなく「async」とマークされていることを意味します。 –

+1

私の答えは、OPの 'ExecuteAsync()'メソッドから 'async'キーワードを削除するのと同じくらい有効です。私はOPの投稿から、非同期/待機パターンを使用したいと推論したので、OPに非同期/待機パターンを使用したソリューションを与えました。 – maccettura

+0

これは、OPが示唆しているawaitキーワードを使用していないため、SendAsyncへの呼び出しが間違っていることを意味しません。 –

関連する問題