我一直在关注Grails提供的有关承诺的文档: https://docs.grails.org/2.3.x/guide/async.html#promises
我有一个很大的id列表,我将它分成不同的tasks
,然后在promise列表中调用waitAll()
。基于此,当其中一个并发任务抛出异常时,是否可以回滚所有更改?
查看代码可能更容易:
def promistList = []
def collatedList = hugeList.collate(100)
collatedList.each {
promiseList << task {
DomainObject.withTransaction {
def domainObject = findById('test')
// do more work
domainObject.save()
}
}
}
waitAll(promiseList)
当一切运作完美时,这种方法很有效,但当然,我必须为事情做得不好而做好准备。理想情况下,即使最后一个任务抛出异常,我也希望回滚在所有任务中所做的所有更改。
这可能吗?