异步方法,不会进行异步调用
问题描述:
我需要创建一个方法,将连接到我的Azure SQL数据库并读取一些数据。所有调用此方法的方法都是异步方法,但我认为我不能将ReadStateProvinceListAsync
设置为async
。异步方法,不会进行异步调用
这些情况下正确的方法是什么?不理会从我有一个async
方法不使用await
关键字编译器的“警告” 或使ReadStateProvinceListAsync
方法定期同步方法在这种情况下GetStateProvinceListAsync
方法会给我同样的警告。
我想做正确的 - 靠书。这就是为什么我想要学习正确的方法。
public static async Task<List<StateProvince>> GetStateProvinceListAsync(string countryId)
{
// Check to see if I already have this data cached
if(gotData)
{
// Life is good! Get data from cache.
}
else
{
// Don't have the data cached. Call the DB read method
statesList = await ReadStateProvinceListAsync(countryId)
}
}
private static async Task<List<StateProvince>> ReadStateProvinceListAsync(string countryId)
{
// Call Azure SQL Database to read data. No async code here!
}
答
使用async
关键字标记同步方法绝对没有价值。如果你的方法不作任何异步调用使其同步:
public static List<StateProvince> GetStateProvinceListAsync(string countryId)
{
// Check to see if I already have this data cached
if(gotData)
{
// Life is good! Get data from cache.
}
else
{
// Don't have the data cached. Call the DB read method
statesList = ReadStateProvinceList(countryId)
}
}
private static List<StateProvince> ReadStateProvinceList(string countryId)
{
// Call Azure SQL Database to read data. No async code here!
}
如果由于某种原因,你必须返回任务(例如,它是一个接口或抽象实现)都使用Task.FromResult
返回一个Task
同步:
private static Task<List<StateProvince>> ReadStateProvinceListAsync(string countryId)
{
return Task.FromResult(ReadStateProvinceList());
}
你想要什么行为?如果你不“等待”任何东西,为什么你首先要做的方法是“异步”?毕竟,这就是制作一个方法'async'的原因:允许'await'。如果'ReadStateProvinceListAsync()'中没有异步实现,那么不要使它成为'async'(并且取掉名字'Async') – 2014-12-06 23:32:39
return await Task.Run(Func ...) – 2014-12-06 23:33:31