2016-03-15 77 views
0

我有一個函數通過HttpClient異步調用外部用戶配置文件WebAPI。根據返回的配置文件,該函數將一些屬性值作爲參數傳遞給存儲庫以獲取參數化數據。問題在於,即使在異步方法返回任何響應之前,函數也會從存儲庫中獲取數據。我會使用阻止同步方法,但HttpClient只提供GetAsync和ReadAsStringnAsync方法。我該怎麼辦?謝謝。異步方法依賴關係

private async Task <IQueryable<WorkItem>> GetSingleProfile(string networkName) { 
 
     UserProfile thisProfile = await HttpClientWrapper.Get <UserProfile> (
 
     System.Configuration.ConfigurationManager.AppSettings["userWebApiEndpoint"], "User/networkname/" + networkName); 
 

 
     IQueryable <WorkItem> userWorkItems = Enumerable.Empty<WorkItem>().AsQueryable(); 
 

 
     if (thisProfile != null) { 
 
     userWorkItems = _workRepository.getWorkItem(thisProfile.userId); 
 
     } 
 
     return userWorkItems; 
 
    }

+0

你能發佈控制器代碼嗎?所有這些私有方法的調用者(及其所有調用者)都應該標記爲異步。 –

+0

發佈HttpClientWrapper的代碼 –

回答

0

的問題是該函數前進到從甚至在異步方法返回任何響應存儲庫中獲得的數據。

然後awaitGetSingleProfile返回的任務。我假設你目前正在調用它是這樣的:

... 
GetSingleProfile(...); 
repository.GetWhatever(...); 
... 

,它應該是:

... 
await GetSingleProfile(...); 
repository.GetWhatever(...); 
... 

注意GetSingleProfile應該被命名爲GetSingleProfileAsync,這是一個指示用戶調用者可能應該是await吧。

我會使用阻塞同步方法,但HttpClient只提供GetAsync和ReadAsStringnAsync方法。

如果你想是同步出於某種原因,那麼就使用WebClient代替。