void transferToBgThread() {
      if (LOG.isTraceEnabled()) {
        LOG.trace("Submitting " + this);
      }
      ApplicationEx app = ApplicationManagerEx.getApplicationEx();
      if (app.isWriteActionInProgress() || app.isWriteActionPending() ||
          app.isReadAccessAllowed() && builder.findUnsatisfiedConstraint() != null) {
        rescheduleLater();
        return;
      }

      if (builder.myCoalesceEquality != null) {
        acquire();
      }
      try {
        Runnable r = ClientId.decorateRunnable(() -> {
          if (LOG.isTraceEnabled()) {
            LOG.trace("Running in background " + this);
          }
          try {
            boolean computationSuccessful;
            if (AppExecutorUtil.propagateContext()) {
              try (AccessToken ignored = ThreadContext.installThreadContext(myChildContext.getContext(), true)) {
                computationSuccessful = attemptComputation();
              }
            } else {
              computationSuccessful = attemptComputation();
            }
            if (!computationSuccessful) {
              rescheduleLater();
            }
          }
          finally {
            if (builder.myCoalesceEquality != null) {
              release();
            }
          }
        });
        backendExecutor.execute((ContextAwareRunnable)() -> r.run());
      }
      catch (RejectedExecutionException e) {
        LOG.warn("Rejected: " + this);
        throw e;
      }
    }
void transferToBgThread()