SaveChangesAsync в цикле - PullRequest
       22

SaveChangesAsync в цикле

0 голосов
/ 04 июля 2019

Я пишу программу, которая извлекает большой объем данных из одной базы данных и сохраняет ее в другой базе данных.

Я зацикливаю данные из одной базы данных, обрабатываю их, и после обработки 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");
    }
...