2016-03-15 65 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代替。