首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行循环调用API

并行循环调用API
EN

Stack Overflow用户
提问于 2022-03-10 15:19:35
回答 1查看 676关注 0票数 0

我使用一个并行循环从C#向API发布数据,其中1000+对象在列表中。反应要么成功,要么失败。我需要用适当的ID在日志文件中记录失败的记录。当我将对象发送到API时,我将ID保存在循环中的局部变量中,并将数据发布。当响应返回时,我假设响应是我为该ID所得到的,并编写日志。

代码语言:javascript
复制
ParallelOptions po = new ParallelOptions
{
    MaxDegreeOfParallelism = 2
};
Parallel.ForEach(lstPost, po, obj=>
{
    string id= obj.Id;
    var response= API calls goes here......;
    if(response.Status== "ERROR")
    {
    //log the details
     Log.Write(ID : response.Status)
    }
}

我怀疑,是否有机会得到别人对别人身份证的回应?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-10 15:50:16

只有当API调用是线程安全的时候,它才是安全的。这将是一个相当安全的假设,但我总是建议在进行任何有关线程安全性的假设之前检查文档。

循环体中的id和响应是局部变量,因此没有在任何线程之间共享,因此完全安全。通常,线程安全问题是共享可变状态,如果状态是非共享的或不可变的,则它是完全安全的。

您还应该考虑日志记录函数的线程安全性。大多数日志库都提供线程安全的日志记录功能,但还是要检查文档是否安全。直接写入文件可能需要一些同步(如锁)才能安全。

然而,这样一个并行循环将启动两个线程,每个线程进行API调用。大多数情况下,发出API调用可能只是等待结果,而在此期间,线程只会阻塞,这有点浪费。使用Parallel.ForEachAsyncTask.WhenAll可以异步进行API调用,因此在等待响应时根本不使用任何线程,从而节省了一些资源。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71426568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档