C#webapi返回后发送数据

时间:2015-04-12 15:36:34

标签: c# asp.net-web-api

我有一个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获得其余结果。

2 个答案:

答案 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;