私は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が例外なく完了している限り、これは非常にうまく機能します。しかし、それが例外で完了したとき、メインスレッドに通知して、それ以上の WorkItems をWorkManager.
を発生させてメインスレッドに通知できると思っていRunetimeExceptionましたが、ログを分析したところ、その瞬間に例外がスローされ、メインスレッドがすべてWorkItemsを に送信し、メソッドのWorkManager呼び出しを終了したことがわかりましjoinたWorkManager。これでは遅すぎます (ほとんどの場合、 50.000 項目がWorkManager) によって実行される必要があります。
WorkManagerでは、で例外が認識されたときに、メインスレッドを中断して、 にさらにアイテムを送信するのを止めるにはどうすればよいworkCompletedでしょうか?