我有一个通过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;
}
&#13;
答案 0 :(得分:0)
问题是即使在异步方法返回任何响应之前,函数仍继续从存储库获取数据。
然后await
从GetSingleProfile
返回任务。我假设你现在称之为:
...
GetSingleProfile(...);
repository.GetWhatever(...);
...
应该是:
...
await GetSingleProfile(...);
repository.GetWhatever(...);
...
请注意,GetSingleProfile
应该命名为GetSingleProfileAsync
,这表示用户可能会await
{。}}。
我会使用阻塞同步方法,但HttpClient只提供GetAsync和ReadAsStringnAsync方法。
如果希望由于某种原因它是同步的,那么只需使用WebClient
。