如何取消单元中已发布的ReadyToWork并替换为Pull类型RTW?
实现RTW(Push/Pull类型)的切换与撤回功能
要完成撤回已发布的Push类型RTW并替换为Pull类型的需求,核心是追踪已发布的Push RTW实例并执行撤回操作,以下是完善后的代码实现:
public class SomeCell: Cell { // 追踪当前活跃的Push类型RTW实例 private ReadyToWork _activePushRtw; [EntrySerialize] public void SendReadyToWorkPush() { // 若已有活跃的Push RTW,先撤回避免重复发布 if (_activePushRtw != null) { Session.TakeBackSession(_activePushRtw.SessionId); _activePushRtw = null; } var rtw = Session.StartSession(ActivityClassification.Production, ReadyToWorkType.Push); PublishReadyToWork(rtw); // 保存实例以便后续可能的撤回操作 _activePushRtw = rtw; } [EntrySerialize] public void SendReadyToWorkPull(long processId) { // 撤回已发布的Push类型RTW if (_activePushRtw != null) { Session.TakeBackSession(_activePushRtw.SessionId); _activePushRtw = null; } var rtw = Session.StartSession(ActivityClassification.Production, ReadyToWorkType.Pull, processId); PublishReadyToWork(rtw); } }
关键实现说明
- 追踪活跃RTW:通过类成员变量
_activePushRtw记录当前已发布的Push类型RTW实例,确保后续能精准定位并撤回。 - 前置撤回操作:无论是重新发布Push类型RTW,还是切换为Pull类型,都先检查是否存在未撤回的Push RTW,若存在则调用
Session.TakeBackSession(需根据实际API调整方法名)执行撤回。 - 状态重置:撤回后将
_activePushRtw置空,避免重复执行撤回操作或错误追踪无效实例。
内容的提问来源于stack exchange,提问作者1nf0rmagician
相关产品推荐
相关产品推荐

