gpt4 book ai didi

c# - 如何使多个 API 调用更快?

转载 作者:行者123 更新时间:2023-12-02 18:27:11 27 4
gpt4 key购买 nike

我正在从某种产品 API 请求数据,但问题是我正在以 20 x 20 的速度获取数据。因此端点如下所示:

https://www.someDummyAPI.com/Api/Products?offset=0&count=20

注意:我无法更改计数,它始终是 20。

即来自此端点的数据将包含 20 条记录,从 0 到 20,之后我必须将偏移量增加 20 以获得下一个 20 条记录,依此类推(总共大约 1500 条记录,所以我必须发出大约 700 条请求)。

获取所有数据后,我使用存储过程将其插入 SQL 数据库(这是不同的过程)。

所以我的问题是,如何才能加快获取过程,我考虑过并行运行任务,但我需要从响应中获取结果。

现在这个过程看起来像这样:

    protected async void FSL_Sync_btn_Click(object sender, EventArgs e)
{
int offset = 0;
int total= 0;
bool isFirst = true;
DataTable resTbl = CreateDt();
while (offset < total || offset == 0)
{
try
{
var data = await GetFSLData(offset.ToString(),"Products");

JObject Jresult = JObject.Parse(data);

if (isFirst)
{
Int32.TryParse(Jresult.SelectToken("total").ToString(),out total);
isFirst = false;
}
// Function to chain up data in DataTable
resTbl = WriteInDataTable(resTbl, Jresult);

offset += 20;
}
catch(Exception ex)
{
var msg = ex.Message;
}
}
}

所以我采用的流程是:

  1. 从 API 获取数据(比方说前 20 条记录)。
  2. 使用 WriteInDataTable 函数添加两个现有的 DataTable
  3. 将数据从此 resTbl Datatable 插入 SQL 数据库(完全不同的过程,未在此屏幕截图中显示)。

我还没有使用过并行任务(甚至不知道它是否是一个正确的解决方案),所以非常感谢任何帮助。

最佳答案

获取你的第一条记录并在循环之前先设置总数:

var data = await GetFSLData(offset.ToString(),"Products");

JObject Jresult = JObject.Parse(data);

Int32.TryParse(Jresult.SelectToken("total").ToString(),out total);

在下一步中,您可以并行化您的任务:

DataTable resTbl = CreateDt();
var downloadTasks = new List<Task>();
while (offset < total)
{
downloadTasks.Add(GetFSLData(offset.ToString(),"Products"));
offset += 20;
}

然后你可以使用Task.WhenAll来获取数据

var httpResults = await Task.WhenAll(downloadTasks);
foreach (var jObjectResult in httpResults.Select(JObject.Parse))
{
resTbl = WriteInDataTable(resTbl, Jresult);
}

只是一些需要注意的事情:您将同时通过大量请求访问该 API,这可能不是一个好主意。如果遇到此问题,您可以在 TPL 数据流库中使用 TransformBlockActionBlock。您可以在此处找到更多相关信息:

https://learn.microsoft.com/en-us/dotnet/standard/parallel-programming/dataflow-task-parallel-library

关于c# - 如何使多个 API 调用更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69985174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com