【发布时间】:2019-09-11 11:25:26
【问题描述】:
我对异步等待几乎没有经验。
我正在尝试为从数据库返回数据的服务创建一个模拟。
具体的服务类可能会比较慢,所以界面返回Task如下图:
public interface IReferenceDataService
{
Task<List<ReferenceDataResults>> GetReferenceData(string domain, string concept);
}
我的模拟类如下所示:
public class MockReferenceDataService : IReferenceDataService
{
public async Task<List<ReferenceDataResults>> GetReferenceData(string domain, string concept)
{
List<ReferenceDataResults> ret = new List<ReferenceDataResults>();
var refDataRepo = new List<ReferenceDataResults>()
{
new ReferenceDataResults{ Domain = "Interfaces.Avaloq", Concept = "Client", Key1 = "CE", Value1 = "2", Key2 = "Avaloq", Value2 = "Individual" },
new ReferenceDataResults{ Domain = "Interfaces.Avaloq", Concept = "Client", Key1 = "CE", Value1 = "3", Key2 = "Avaloq", Value2 = "Joint" }
};
var found = refDataRepo.FindAll(x => x.Domain == domain && x.Concept == concept);
foreach (var row in found)
{
ret.Add(new ReferenceDataResults() { Concept = row.Concept,
Domain = row.Domain, Key1 = row.Key1, Key2 = row.Key2, Value1 = row.Value1, Value2 = row.Value2 });
}
return ret;
}
}
这会给出编译器警告,因为它被标记为“异步”但缺少“等待”。 我猜最接近数据库检索的是 List 上的 FindAll 方法,但似乎没有我可以“等待”的 FindAll 的异步版本。
解决此问题的最佳方法是什么?
【问题讨论】:
-
将return语句更改为
return await Task.FromResult(ret);。您可以在here阅读有关Task.FromResult的详细信息 -
@user1672994 我建议丢失
async和await,只使用return Task.FromResult(ret);
标签: c# async-await task-parallel-library