code: public Future<DependencyGraph> rebuildDependencyGraphAsync() {
          dependencyGraphDirty.set(true);
          return Timer.get().schedule(new java.util.concurrent.Callable<DependencyGraph>() {
              @Override
              public DependencyGraph call() throws Exception {
                  if (dependencyGraphDirty.get()) {
                      rebuildDependencyGraph();
                  }
                  return dependencyGraph;
              }
          }, 500, TimeUnit.MILLISECONDS);
      }
docs: Rebuilds the dependency map asynchronously.
  
  <p>
  This would keep the UI thread more responsive and helps avoid the deadlocks,
  as dependency graph recomputation tends to touch a lot of other things.
  
  @since 1.522