2017-07-04 7 views
1

を取得します。は、私はASP.NETアイデンティティ2.2.1を使用して、タスクの戻り値の型(ではないタスク<T>)

私はこのようなインタフェースIIdentityMessageServiceを実装:

以下
public class EmailService : IIdentityMessageService 
{ 
    public Task SendAsync(IdentityMessage message) 
    { 
     string body = ONMailStyles.getOpening(); 
     body += message.Body; 
     Mail mailService = new Mail(message.Destination, message.Subject, body); 
     string succes = mailService.send(); 
     return Task.FromResult(succes); 
    } 
} 

は私のメールクラスの(一部)である:

:私は次の行を持って私のコントローラのの一つで

public class Mail 
{ 
    public MailMessage message { get; set; } 
    public string send(string host, int port, string username, string wachtwoord, int timeout) 
    { 
     SmtpClient ss = new SmtpClient(host, port); 
     ss.EnableSsl = true; 
     ss.Timeout = timeout; 
     ss.DeliveryMethod = SmtpDeliveryMethod.Network; 
     ss.UseDefaultCredentials = false; 
     ss.Credentials = new System.Net.NetworkCredential(username, wachtwoord); 
     try 
     { 
      ss.Send(message); 
      message.Dispose(); 
      return "succes"; 
     } 
     catch (Exception ex) 
     { 
      return "no succes: " + ex.ToString(); 
     } 
    } 
} 

var emailResult = UserManager.SendEmailAsync(user.Id, "Activeer uw lichtmeting account.", htmlMessage); 

は、私は戻っタイプTaskの結果を取得します。私はこのようなawaitていた場合、私はsuccesの文字列の結果を取得することが期待:

var emailResult = await UserManager.SendEmailAsync(user.Id, "Activeer uw lichtmeting account.", htmlMessage); 

をしかし、私は以下のコンパイルエラーを取得:「暗黙的に型指定された変数に空白を割り当てることはできません」。私はちょうど私のコントローラでsuccessの結果を取得したいです。私はそれをどのように達成するのですか?

答えて

1

あなたは、インターフェイスメソッドを隠し、外部から使用するように、独自のメソッドを作成することができます。

public class EmailService : IIdentityMessageService 
{ 
    Task IIdentityMessageService.SendAsync(IdentityMessage message) 
    { 
     return this.SendAsync(message); 
    } 

    public Task<string> SendAsync(IdentityMessage message) 
    { 
     string body = ONMailStyles.getOpening(); 
     body += message.Body; 
     Mail mailService = new Mail(message.Destination, message.Subject, body); 
     string succes = mailService.send(); 
     return Task.FromResult(succes); 
    } 
} 
+0

私はあなたが解決しようとしましたが、まだそれを動作させることはありません。私のコントローラでは 'SendAsmailAsync'ではなく' SendAsmailAsync'を呼び出します。私は 'manager.EmailService =新しいEmailService()を呼び出して、私は私のUserManagerクラス;' –

0

あなたのSendAsyncメソッドでのawaitを持っていない - それは実際に非同期的に何かを呼んでいますか?あなたはそれが文字列を返すようにしたい場合はまた、あなたはそれがTask<string>、いないタスクを返すようにする必要があります。私はこれらの線に沿って何かを試してみたい。

public class EmailService : IIdentityMessageService 
{ 
    public async Task<string> SendAsync(IdentityMessage message) 
    { 
     string body = ONMailStyles.getOpening(); 
     body += message.Body; 
     var mailService = new Mail(message.Destination, message.Subject, body); 
     string success = await mailService.send(); 
     return success; 
    } 
} 
+0

私自身の作成した 'mailService'(' Mail'クラスは)非同期メソッドを持っていません。私は上記のSendAsync方法で偽のawaitか何かに置くことができません。 Otheriwise私はMailクラスで非同期メソッドを作成する必要があります –

+0

非同期メソッドを呼び出さない場合は、タスクを使用する際にポイントがありませんので、標準の同期コードを使用してください。 –

関連する問題