我正在编写一个程序,该程序从一个数据库中提取大量数据并将其保存到另一个数据库中。
我从一个数据库中循环数据,进行处理,在处理完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");
}