小编Lyk*_*ios的帖子

CsvHelper - 异步读取流

我有一个服务,它接受一个包含需要批量插入数据库的 CSV 数据的输入流,并且我的应用程序尽可能使用 async/await。

过程是:使用CsvHelper的CsvParser解析流,将每一行添加到DataTable中,使用SqlBulkCopy将DataTable拷贝到数据库中。

数据可以是任何大小,所以我想避免一次将整个内容读入内存 - 显然我最终将在 DataTable 中拥有所有数据,因此在内存中基本上会有 2 个副本。

我想尽可能异步地完成所有这些,但 CsvHelper 没有任何异步方法,所以我想出了以下解决方法:

using (var inputStreamReader = new StreamReader(inputStream))
{
    while (!inputStreamReader.EndOfStream)
    {
        // Read line from the input stream
        string line = await inputStreamReader.ReadLineAsync();

        using (var memoryStream = new MemoryStream())
        using (var streamWriter = new StreamWriter(memoryStream))
        using (var memoryStreamReader = new StreamReader(memoryStream))
        using (var csvParser = new CsvParser(memoryStreamReader))
        {
            await streamWriter.WriteLineAsync(line);
            await streamWriter.FlushAsync();

            memoryStream.Position = 0;

            // Loop through all the rows (should only be one as …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous stream async-await csvhelper

5
推荐指数
1
解决办法
5973
查看次数

标签 统计

async-await ×1

asynchronous ×1

c# ×1

csvhelper ×1

stream ×1