void () { if (myEvaluated || isObsolete()) { return; } new Task.Backgroundable(myProject, XDebuggerBundle.message("load.value.task.text"), true, PerformInBackgroundOption.DEAF) { @Override public void run(@NotNull ProgressIndicator indicator) { indicator.setIndeterminate(true); int i = 0; while (!myCanceled && !myEvaluated) { indicator.checkCanceled(); indicator.setFraction(((i++) % 100) * 0.01); mySemaphore.waitFor(300); } } @Override public void onCancel() { myCanceled = true; } }.queue(); }