void () { final boolean shouldPostponeAllTasks = HeavyProcessLatch.INSTANCE.isRunning() || mySuspendBackgroundTasksCounter.get() > 0; if (!shouldPostponeAllTasks && !shouldPostpone() && !myInProgress.getAndSet(true)) { try { AppJavaExecutorUtil.executeOnPooledIoThread(myTaskRunnable); } catch (CancellationException ignored) { // we were shut down myInProgress.set(false); } catch (Throwable e) { myInProgress.set(false); throw new RuntimeException(e); } } else { schedule(shouldPostponeAllTasks); } }