我有一个 WebApi,对于每个传入的请求,调用 2 个单独的 Web 服务,执行一些后处理并返回结果。
第一个 webservice 调用在本地缓存 1 小时,其中的数据决定了对第二个 webservice 的查询。对每个传入请求调用第二个 Web 服务。在发出第二个请求后,每个结果都使用业务逻辑进行处理并返回给客户端响应。
对第二个 Web 服务的调用不能是异步的,因为它使用了不允许 await 关键字的第 3 方 dll。我所做的是将第二个 web 服务调用和后处理包装到一个异步函数中,该函数从控制器调用。
// /api/controller/news?key=a&state=b
public async Task<HttpResponseMessage> GetNews(string key, string state)
{
// call to first webservice if not in cache
if (JsonConfig != null && JsonConfig.Configuration.NewsQuery.ContainsKey(key))
{
var results = await SearchProxyProvider.Search(filters.All, filters.Any, filters.None, filters.Sort, 100, 0, true, state, true);
int totalCount = results.TotalCount;
return Request.CreateResponse(HttpStatusCode.OK, results);
}
}
// Helper class method
public async Task<ItemCollection<Item>> Search(List<FieldValuePair> allFilters, List<FieldValuePair> anyFilters, List<FieldValuePair> noneFilters, SortedFieldDictionary sortBy, int pageSize = 100, int pageNumber = 0, bool exact = true, string stateFilter = null, bool getAllResults = true)
{
// call to 2nd api
search = SomeApi.Search(allFilters, anyFilters, noneFilters, pageSize, pageNumber, exact,
sortBy, null, WebApiConstant.Settings.CustomFields, true);
// post processing on search results
return search;
}
因为对第一个 web 服务的调用是在本地缓存的,所以我并没有真正看到使这个异步的巨大好处。
我只是想看看这种方法是完全错误的还是正确的。