You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core控制台C#环境下多级依赖API高效调用方案问询

.NET Core 接口请求最优实现方案

核心优化逻辑

API1、API2为强依赖的串行步骤,必须按顺序执行;后续API3、API4不存在依赖关系,可通过异步并行+去重的方式大幅提升执行效率,和串行循环调用相比,整体耗时可从O(n)级(n为车辆数量)降到接近固定耗时,同时减少无效请求。

具体实现步骤

1. 串行执行前置依赖请求

  • 异步调用API1获取DataID,使用await保证拿到结果后再执行后续流程
  • 传入DataID异步调用API2获取vehicleIds数组,提前对数组做去重处理,避免后续重复请求相同车辆数据

2. 并行批量调用API3获取车辆详情

使用Task.WhenAll发起所有车辆详情的异步请求,无需逐个等待返回,参考代码:

// 已提前定义好VehicleDetail实体类匹配返回字段,dataId、vehicleIds为前置步骤拿到的结果
var vehicleDetailTasks = vehicleIds.Select(vehicleId => 
    httpClient.GetFromJsonAsync<VehicleDetail>($"../api/{dataId}/vehicles/{vehicleId}")
);
// 等待所有车辆详情请求完成
var vehicleDetails = (await Task.WhenAll(vehicleDetailTasks)).ToList();

3. 去重后并行调用API4获取经销商信息

先从车辆详情中提取所有dealerId并去重,避免同一个经销商重复发起请求,再批量调用API4:

// 已提前定义好DealerInfo实体类匹配返回字段
var distinctDealerIds = vehicleDetails.Select(v => v.DealerId).Distinct().ToList();
var dealerTasks = distinctDealerIds.Select(dealerId =>
    httpClient.GetFromJsonAsync<DealerInfo>($"../api/{dataId}/dealers/{dealerId}")
);
// 把返回结果转成字典方便后续匹配
var dealerDict = (await Task.WhenAll(dealerTasks)).ToDictionary(d => d.DealerId, d => d.Name);

4. 结果拼装

遍历车辆详情列表,从dealerDict中匹配对应经销商名称即可得到最终需要的完整数据。

额外优化建议

  • 若vehicleIds数量较大(超过接口限流阈值),可使用SemaphoreSlim控制并发数,避免触发接口限流,参考代码:
// 限制最多同时发起10个请求,可根据接口限流规则调整数值
using var semaphore = new SemaphoreSlim(10);
var vehicleDetailTasks = vehicleIds.Select(async vehicleId =>
{
    await semaphore.WaitAsync();
    try
    {
        return await httpClient.GetFromJsonAsync<VehicleDetail>($"../api/{dataId}/vehicles/{vehicleId}");
    }
    finally
    {
        semaphore.Release();
    }
});
var vehicleDetails = (await Task.WhenAll(vehicleDetailTasks)).ToList();
  • 可搭配Polly库配置重试、熔断策略,处理偶发的接口请求失败问题,提升流程稳定性
  • 全程使用异步方法,不要用.Result、.Wait()等同步阻塞方法,避免线程阻塞和死锁风险

内容的提问来源于stack exchange,提问作者software developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:36:00