循环中的SaveChangesAsync

时间:2019-07-04 00:00:17

标签: c# asynchronous async-await entity-framework-core task

我正在编写一个程序,该程序从一个数据库中提取大量数据并将其保存到另一个数据库中。

我从一个数据库中循环数据,进行处理,在处理完x条记录后,我将新实体保存到第二个数据库中,输出结果,然后继续进行剩余的处理。但是,我想将SaveChangesAsync()放在新线程上,以便它可以在保存更改时继续处理数据。

我尝试创建一个任务,但是阻止了循环的执行。

示例代码:

 public static void ProcessStuff(db1Context db1, db2Context db2)
    {
        Console.WriteLine("Processing stuff:");

        var Entities = db1.Entities.ToList();

        int t = 0;
        foreach (var entity in Entities)
        {
            //process data into new entities
            .............



            db2.Entity.Add(newEntity);
            t += 1;

            if (t % 1000 == 0 && t != 0)
            {
                //save changes

                Task saveTask = SaveData(db2, t);

            }

        }

    }

    public static async Task SaveData(ClicContext db, int i)
    {
        await db.SaveChangesAsync();
        Console.WriteLine("\tProcessed " + i + " entities");
    }

0 个答案:

没有答案