【问题标题】:Making parallel API calls while reading a file(csv)在读取文件时进行并行 API 调用(csv)
【发布时间】:2014-01-02 09:58:48
【问题描述】:

我有非常具体的要求,我不知道如何开始。我是 c# 新手,所以请耐心回答相当模糊的问题:

我需要读取一个 csv 文件并为每个条目进行一次 Web API 调用。我想要的是这样的:

  1. 读取 csv 文件的一个条目(行)。
  2. 进行 API 调用并将响应存储在数据库中
  3. 在执行 2 时,继续读取和缓冲 CSV 条目。如果可能,在写入 DB 时,继续进行 API 调用

有人可以指点我实现这一目标的方式吗?我正在研究 C#、.NET 注意:请随意使用任何示例 csv、API 调用等。

【问题讨论】:

  • 读取时正在写入 csv?
  • @I3arnon 没有 CSV 是预先编写的,因此不会更改。我需要阅读它,为每一行调用 api 并将响应保存在数据库中。
  • 那我的回答很合适。尽管如果文件 方式 太大(几场演出),正如@Rasher 建议的那样,您可以将 File.ReadAllLines 替换为在每次迭代中读取一行的动态循环。
  • @I3arnon 我认为我的文件不会超过 50 MB 左右。
  • 然后坚持使用 ReadAllLines

标签: c# .net c#-4.0 csv parallel-processing


【解决方案1】:

一般问题的一般答案:

  1. File.ReadAllLines 从文件中获取所有行。 String.Split 获取一行的所有单元格。
  2. Parallel.Foreach 将并行遍历行(在多核环境中)。
  3. 您似乎希望对 DB 的调用是异步的。您可以使用 async-await 实现此目的,但前提是您的特定数据库客户端支持异步调用。

【讨论】:

    【解决方案2】:

    它还取决于 csv 文件的大小。如果您可以通过 File.ReadAllLines 将其加载到内存中,那么@i3arnon 提供的场景就很好了。您还可以查看此网址: Make an Async/Await db call within a Task?

    【讨论】:

    • CSV 有大约 40-50k 行
    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多