C# 修改数据时安全异步保存?
我正在做一个小项目,我需要在任何时候不断地模拟(修改)多个超大对象数据。修改就像链接的网格一样复杂——大量对象的内部数据也被抛出、交换和计算 但是,我还希望通过异步将定时保存(DTO映射+序列化)到多个分组文件中,以防止其不断出现口吃,因为保存过程相当繁琐 在一直修改数据的同时异步保存是否安全?如果没有,我可以做什么选择 同时,你可能会告诉我克隆这个对象,这样保存起来就安全了——但这只是偏离了我的目标——这些对象实在太大了C# 修改数据时安全异步保存?,c#,asynchronous,C#,Asynchronous,我正在做一个小项目,我需要在任何时候不断地模拟(修改)多个超大对象数据。修改就像链接的网格一样复杂——大量对象的内部数据也被抛出、交换和计算 但是,我还希望通过异步将定时保存(DTO映射+序列化)到多个分组文件中,以防止其不断出现口吃,因为保存过程相当繁琐 在一直修改数据的同时异步保存是否安全?如果没有,我可以做什么选择 同时,你可能会告诉我克隆这个对象,这样保存起来就安全了——但这只是偏离了我的目标——这些对象实在太大了 项目将过程分为两部分:在检查保存之前模拟对象。因此,是的,只有在模拟过程
项目将过程分为两部分:在检查保存之前模拟对象。因此,是的,只有在模拟过程之外进行保存时才有效。这就是为什么我问异步是否安全,因为我不完全理解它
我的下一个问题是,保存是否会发生在模拟过程中?如果是这样的话,我还可以用什么方法来节省而不影响模拟速度?或者可能需要对异步保存过程执行一些模式,这样它就不会保存在模拟过程中?异步就像多线程一样,尽管它不会创建任何线程,但我真的不明白为什么。在这种情况下,我将无法在模拟对象时保存它们,因为IO将中断模拟
- 异步IO不安全
- 保存将在模拟过程中发生
- 解决方案是在某一点未使用时停止并缓存模拟中的部分对象,这将提高性能,并允许保存缓存的对象。保存过程是排队的,其中保存对象的任务将按照以下条件逐一执行
- 如果在开始保存排队对象的任务之前再次将对象重新激活到模拟中,则将取消保存,并且对象将在不中断的情况下重新激活。保存将移到下一个排队对象
- 如果要在保存时重新激活对象,则必须等待线程,直到保存该特定对象的任务最终完成