我有一个返回Task的方法,特别是它是SendAsync
的{{1}}方法。
现在,我知道如何使用IIdentityMessageService
作为直接的方法。但我的问题是我的接口client.SendAsync()
方法执行其他检查和验证。如果一切正常,它会调用SendAsync
并完成。
但正如我所提到的,该方法执行检查和验证,如果发现不正确的东西,我应该使用什么样的返回签名?有没有办法在那种情况下检索错误信息?
对于那些明确的东西,不应该是对代码的需求,但是如果你需要对它进行可视化,那么这就是我的意思......
smtpClient.SendAsync
对于我看到的public class EmailService : IIdentityMessageService
{
public Task SendAsync(IdentityMessage message)
{
SmtpClient smtp = new SmtpClient();
if (everythingIsOkay)
{
return smtp.SendEmailAsync(); // (BBBB)
}
else // something is not right
{
// <= THIS IS WHAT I NEED (AAAA)
}
}
}
使用AccountController
所以它等待任务完成但是我如何在await
- 得到它是否因为终止而终止的结果AAAA或BBBB?
答案 0 :(得分:2)
那么,如果代码是同步的,你会怎么做?
public void Send(IdentityMessage message)
{
SmtpClient smtp = new SmtpClient();
// some stuff here to configure SmtpClient
if (everythingIsOkay)
smtp.SendEmail();
else // something is not right
???
}
可能是这样的:
public void Send(IdentityMessage message)
{
SmtpClient smtp = new SmtpClient();
// some stuff here to configure SmtpClient
if (everythingIsOkay)
smtp.SendEmail(); // throws an exception on error
else // something is not right
throw new ConfigurationException(...);
}
所以,你以同样的方式异步进行:
public async Task SendAsync(IdentityMessage message)
{
SmtpClient smtp = new SmtpClient();
// some stuff here to configure SmtpClient
if (everythingIsOkay)
await smtp.SendEmailAsync(); // throws an exception on error
else // something is not right
throw new ConfigurationException(...);
}