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