2017-07-04 159 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

我試過你是解決方案,但仍然沒有得到它的工作。注意我在我的控制器中調用'SendEmailAsync'而不是'SendAsync'。我的UserManager類叫'manager.EmailService = new EmailService();' –

0

你沒有一個地等待着你的SendAsync方法 - 它實際上是調用什麼異步?此外,如果你希望它返回一個字符串,你應該讓它回到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方法中放置假等待或其他東西。 Otheriwise我必須在我的Mail類中創建一個異步方法 –

+0

如果您沒有調用任何異步方法,那麼在使用任務和等待時沒有意義,您應該只使用標準同步代碼。 –