获取任务(未任务)
的返回类型我使用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
结果在我的控制器。我如何实现这一目标?
可以隐藏接口方法,并创建自己的方法从外部使用:
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);
}
}
你没有一个地等待着你的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;
}
}
我自己创建的'mailService'('Mail'类)没有异步方法。我不能在上面的SendAsync方法中放置假等待或其他东西。 Otheriwise我必须在我的Mail类中创建一个异步方法 –
如果您没有调用任何异步方法,那么在使用任务和等待时没有意义,您应该只使用标准同步代码。 –
我试过你是解决方案,但仍然没有得到它的工作。注意我在我的控制器中调用'SendEmailAsync'而不是'SendAsync'。我的UserManager类叫'manager.EmailService = new EmailService();' –