2

我正在使用IBM WorkManager (v8.0.0)来做一些与主线程异步的工作。

为此,我使用以下代码:

// wm = via resource injected WorkManager

WorkItem item = wm.startWork(work, WorkManager.INDEFINITE, new WorkListener() {

  @Override
  public void workStarted(WorkEvent arg0) {
  }

  @Override
  public void workRejected(WorkEvent arg0) {
  }

  @Override
  public void workCompleted(WorkEvent arg0) {
    WorkException exception = arg0.getException();
    if (null != exception) {
      throw new RuntimeException("WorkCompleted with Exception");
    }
  }

  @Override
  public void workAccepted(WorkEvent arg0) {
  }
});

WorkEvent只要毫无例外地完成,这工作就很好。但是当它以异常完成时,我想通知主线程停止向WorkManager.

我以为我可以提出一个RunetimeException通知主线程,但是分析日志我发现在主线程完成所有提交并调用 - 的 - 方法的那一刻引发了异常,WorkItemsWorkManager为时joinWorkManager晚(在大多数情况下50.000 项必须由WorkManager) 完成。

WorkManager那么,当在 中识别出异常时,如何中断我的主线程以阻止它向 提交更多项目workCompleted

4

1 回答 1

1

那么你需要一个“更直接”的界面。

意义; 您正在显示调用的代码:

WorkItem item = wm.startWork(work, WorkManager.INDEFINITE, new WorkListener()

包含该指令的类需要一些“输入”通道;例如,该类List<Exception>中可能有一个“简单”字段,您的工作项会将其例外添加到其中。

创建这些工作项的“主”类应该定期检查该列表;并在发现异常时停止添加新的工作项。

当然,您必须使该线程安全,并提供合理的架构。

于 2017-03-17T10:39:13.767 回答