比如我需要执行很多任务,执行任务比较耗时,所以才去了异步执行
我的调度方法把要执行的任务拿到(比如在方法 A 中)
然后通过异步方法去执行(方法 B 中)
我需要修改这个任务状态为执行中
这个时候,有个事务问题,就是,我修改任务状态是在 A 中,不能在 B 中,因为 B 有可能会执行很久才完成,才进行事
务提交,外部看着任务的状态会很长一段时间没有状态
所以,我在 A 中修改任务状态,然后异步执行 B
但是,如果 B 执行的足够快,有可能我的 A 还没有提交,B 查询得到的状态就是空的,这个时候,A 提交了,然后 B 提交
了,那么 B 提交的数据里,状态就是空的,把 A 提交的任务状态覆盖了
这个场景可能没那么恰当,但是应该能表达我想说的意思了
就是这种有异步执行的场景下,为了确保前一个事务确实提交了,再执行异步方法,只有手动提交事务么?有没有
更优雅的方法呢,谢谢~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.