异步方法依赖

时间:2016-03-15 06:15:07

标签: asp.net-mvc asp.net-mvc-4 asynchronous

我有一个通过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;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

  

问题是即使在异步方法返回任何响应之前,函数仍继续从存储库获取数据。

然后awaitGetSingleProfile返回任务。我假设你现在称之为:

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

应该是:

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

请注意,GetSingleProfile应该命名为GetSingleProfileAsync,这表示用户可能会await {。}}。

  

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

如果希望由于某种原因它是同步的,那么只需使用WebClient