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

如果您没有调用任何异步方法,那么在使用任务和等待时没有意义,您应该只使用标准同步代码。 –