【发布时间】:2017-10-15 05:11:33
【问题描述】:
是的,我知道还有其他问题可以涵盖此警告的含义以及如何解决它,但是,我有一个关于异步编程最佳实践的问题。
我有一个服务层,它处理数据层和表示层之间的数据传输。该服务包含多个查询数据库并返回结果的方法。
我一直在尝试尽可能使用异步编程。一个例子:
public async Task<SiteTemplateResource[]> GetResources(int siteTemplateId, string extension)
{
return await Database.FindBy<SiteTemplateResource>(str => str.SiteTemplateId == siteTemplateId && str.HashedFile.EndsWith(extension)).ToArrayAsync();
}
我的问题是,除了ToArrayAsync 电话之外,我实际上并没有等待任何东西,我真的需要它。
我应该继续使用 async/await 吗?例如,我将如何等待此功能的任何内容:
public async Task<int> SiteTemplateBySiteIdAsync(int siteId)
{
return Database.First<SiteSiteTemplate>(sst => sst.SiteId == siteId).SiteTemplateId;
}
我不等待该函数中的任何内容,但我也不需要调用ToArrayAsync,那么在上述情况下如何避免警告“方法缺少'await'运算符”?
提前致谢。
【问题讨论】:
-
如果你有
ToArrayAsync,你也应该有FirstAsync。至于第一种方法 - 只需删除 async\await 关键字。ToArrayAsync返回 Task 并且您的 GetResources 方法返回 Task - 此处无需使用 async\await。 -
@Evk 我不知道它存在,谢谢。
-
如果返回异步操作的结果,则不需要使用
async/await。只需使用public Task<...> GetResources(..)=> return Database.FindBy.....ToArrayAsync(); -
你也可以使用
Where、Select和FirstAsync来保持第二种方法异步
标签: c# async-await