C# 异步方法的返回类型应该是什么
我有一段代码,下面给出了analyzer警告:C# 异步方法的返回类型应该是什么,c#,async-await,C#,Async Await,我有一段代码,下面给出了analyzer警告: public async Task SendPasswordEmail(string emailId, string link) { await _emailSender .To(emailId) .Subject(EmailUtilsConstants.PasswordEmailSubject) .Body(EmailUtilsConstant
public async Task SendPasswordEmail(string emailId, string link)
{
await _emailSender
.To(emailId)
.Subject(EmailUtilsConstants.PasswordEmailSubject)
.Body(EmailUtilsConstants.PasswordEmailText + link)
.SendAsync();
}
我得到的警告是:
方法“SendPasswordEmail”不需要使用async/await
如果该方法不应该使用async await,那么返回类型应该是什么<代码>任务。那么下面的修正是否正确
public Task SendPasswordEmail(string emailId, string link)
{
_emailSender
.To(emailId)
.Subject(EmailUtilsConstants.PasswordEmailSubject)
.Body(EmailUtilsConstants.PasswordEmailText + link)
.SendAsync();
return Task.Completed;
}
如果函数内部为单行,则可以删除
async
和wait
关键字。
我猜SendAsync
已经返回了Task
对象,所以不需要等待,只需返回Task
:
public Task SendPasswordEmail(string emailId, string link)
{
return _emailSender
.To(emailId)
.Subject(EmailUtilsConstants.PasswordEmailSubject)
.Body(EmailUtilsConstants.PasswordEmailText + link)
.SendAsync();
}
Async/Await
将给您的方法带来额外的开销。编译器将为所有异步方法创建“状态机”,这在方法体中只有一行代码的情况下是不必要的
更新:(感谢对@JohnathanBarclay的评论)
另一个不同之处是,如果省略async/await
m,异常处理将发生一些变化。async
方法的状态机将从代码中捕获异常,并将它们放在返回的任务中。但是,如果省略async/await
,情况就不一样了
阅读了解更多信息。
公共异步任务
sais它需要一个任务。Async/await不是别的,当使用例如Task时,返回一个在编译器中有值的任务将被解包。如果到,主题或正文
抛出异常,则唯一的问题是;它将直接抛出,而不是放在任务上。这不仅仅是一个简单的传递到SendAsync
的过程,所以我认为这个警告有点幼稚。