首页 > 解决方案 > p4java api 需要两次刷新才能获得新的更改列表描述

问题描述

在我的应用程序中,我有一部分想自动请求 Swarm 审查。为此,我在更改列表描述中放置了一个#review 标记并将文件搁置(之后,Swarm 评论编号出现在描述中的标记之后)。一切正常,除了我需要在搁置后双重刷新更改列表以获取更新的描述并提取评论 ID。如果我只使用一次刷新,或者根本不刷新,则提取的描述不包含评论 ID。更重要的是,它在逐步调试时只需一次刷新就可以很好地工作,但不是实时的。

client.shelveChangelist(changelist);
IChangelist cl = server.getChangelist(changelist.getId());
cl.refresh();
cl.refresh();
String description = cl.getDescription;

(实际上,刷新执行了 3 次,因为在 refresh() 方法中也调用了 getDescription() 方法)。你知道为什么会这样吗?我尝试深入挖掘这些方法,寻找新线程或同步代码,但都没有奏效。

标签: javaapiperforceswarmp4java

解决方案


这是一个时间问题。

服务器端会发生什么:搁置命令上的触发器触发,它异步调用 Swarm 来创建评论。你的 shelveChangelist() 完成。Swarm 现在创建评论。然后 Swarm 更新原始变更列表描述。

在刷新之前睡一两秒钟。当然,如果 Swarm 非常忙碌,它可能需要一两秒以上的时间。或者,如果 Swarm 站点出现故障,则可能根本不会发生。


推荐阅读