我有一个API,可以从我的数据库中返回商店列表以及Google Places API中的商店。
IEnumerable<ShopInOfferDetails> modelApi = null;
IEnumerable<ShopInOfferDetails> modelDb = null;
await new TaskFactory()
.StartNew(() =>
{
modelApi = Service.GetShopsFromGoogleApi(g);
})
.ContinueWith(x =>
{
modelDb = Service.GetShopsFromDb(g);
});
var model = modelApi.Concat(modelDb);
return model;
事情是,从Google API获取和处理结果需要很长时间(我在后台做了一些工作),我想知道是否有办法从我的数据库中获取第一个数据 - 返回这些数据发送给客户,然后再从Google Api和Return中获取更多数据 - 以这种方式,客户端快速获得第一个结果,然后从Google API获得其余结果。
答案 0 :(得分:1)
如果我是你,我会创建两种不同的Web API方法,并从客户端异步调用它们。当每个人返回时,客户端可以立即显示结果 - 这将产生预期的效果:用户首先会看到数据库中的结果,然后是Google API中较慢的结果。
答案 1 :(得分:0)
我稍微重构一下:
List<ShopInOfferDetails> items = new List<ShopInOfferDetails>();
List<Task<IEnumerable<ShopInOfferDetails>>> tasks = new List<Task<IEnumerable<ShopInOfferDetails>>>();
var task1 = Task.Run(() => {
items.AddRange(Service.GetShopsFromGoogleApi(g));
});
tasks.Add(task1);
var task2 = Task.Run(() => {
items.AddRange(Service.GetShopsFromDb(g));
});
tasks.Add(task2);
Task.WaitAll(tasks.ToArray());
return items;