2014-12-06 81 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