有一个文件是分部分读取的,每个部分都通过yield return返回,然后负责将读取行写入数据库的任务应该使用EF Core启动。问题是不可能在一个上下文上同时运行多个操作。
List<Task> tasks = new List<Task>();
foreach (var portion in reader.ReadPortions(file, 1000))
tasks.Add(Task.Run(async () => await saver.SaveWithMerge(portion)));
Task.WaitAll(tasks.ToArray());
如何解决这一问题?
不可能在一个上下文上同时运行多个操作。
这是正确的。您的选择是:
- 执行所有更改,然后执行单个
SaveChangesAsync
- 使用多个EF上下文,每个并发更新一个
- 批处理更改,并在每个批之间调用
SaveChangesAsync