2017-03-22 18 views
0

説明保留している間に完了した非同期モジュールまたはハンドラ:私は一人にそれを送信するとき、メールがsuccessfuly送信された、MVCアプリケーションから電子メールを送信していますが、私が送ったときに非同期処理がまだ

を複数の人にメールを送信してから例外が発生します。つまり、操作がタイムアウトしました。

だから、私が使用smtpclient.SendAsync(メッセージ、オブジェクト)メソッドをしようとしているこの問題を回避するために、私は例外すなわち非同期処理がまだ保留している間に完了した非同期モジュールまたはハンドラを取得しています。

この問題を解決するにはどうすればよいですか?

コード:

public async Task<string> SendEmail(List<string> ToEmailAddresses,string body, string emailSubject) 
     { 


      var smtp = new SmtpClient 
      { 
       DeliveryMethod = SmtpDeliveryMethod.Network, 
       Host = "xyz-host-name", 
       Port = 25, 
       EnableSsl = false, 
       Timeout = 600000 
      }; 

      var fromAddress = new MailAddress(ConfigurationManager.AppSettings["MailUserName"], "Rewards and Recognition Team"); 

      using (var message = new MailMessage() { Subject = emailSubject, Body = body }) 
      { 
       message.From = fromAddress; 

       foreach (string email in ToEmailAddresses) 
       { 
        message.To.Add(email); 
       } 
       message.IsBodyHtml = true; 
       try 
       { 
        _logger.Log("EmailService-SendEmail-try"); 
        object userToken = message; 
        smtp.SendAsync(message,userToken); 
        return "Success"; 
       } 
       catch (Exception ex) 
       { 
        _logger.Log("EmailService-SendEmail-" + ex.Message); 
        return "Error"; 
       } 
      } 
     } 

答えて

1

あなたは

public async task<ActionResult> SendMail(object obj) 

{ 
var result = await SendEmail(ToEmailAddresses,body,emailSubject) 
return result 
} 
のようなのActionResultでのawaitキーワード(コントローラ側)を使用する必要があります