2014-12-06 80 views
0

我需要创建一个方法,将连接到我的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! 
} 
+0

你想要什么行为?如果你不“等待”任何东西,为什么你首先要做的方法是“异步”?毕竟,这就是制作一个方法'async'的原因:允许'await'。如果'ReadStateProvinceListAsync()'中没有异步实现,那么不要使它成为'async'(并且取掉名字'Async') – 2014-12-06 23:32:39

+0

return await Task.Run(Func <> ...) – 2014-12-06 23:33:31

回答

3

使用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()); 
} 
+0

谢谢响应。 – Sam 2014-12-07 00:18:01

+0

@Sam sure ..任何时候。 – i3arnon 2014-12-07 00:18:24