私は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
でしょうか?