void (@Nullable XStackFrame contextFrame, @NotNull final List<PyAsyncValue<String>> pyAsyncValues) { PyDebugValueExecutionService.getInstance(getProject()).submitTask(this, () -> { try { if (isConnected()) { final PyStackFrame frame = contextFrame == null ? currentFrame() : (PyStackFrame)contextFrame; XSuspendContext context = getSession().getSuspendContext(); String threadId = threadIdBeforeResumeOrStep(context); for (PyThreadInfo suspendedThread : mySuspendedThreads) { if (threadId == null || threadId.equals(suspendedThread.getId())) { myDebugger.loadFullVariableValues(frame.getThreadId(), frame.getFrameId(), pyAsyncValues); break; } } } } catch (PyDebuggerException e) { if (!isConnected()) return; for (PyAsyncValue<String> asyncValue : pyAsyncValues) { PyDebugValue value = asyncValue.getDebugValue(); for (XValueNode node : value.getValueNodes()) { if (node != null && !node.isObsolete()) { if (e.getMessage().startsWith("Timeout")) { value.updateNodeValueAfterLoading(node, " ", "", PyBundle.message("debugger.variables.view.loading.timed.out")); ConfigureTypeRenderersHyperLink configureLink = new ConfigureTypeRenderersHyperLink(null, getProject(), value); if (node instanceof XValueNodeImpl valueNode) { valueNode.clearAdditionalHyperlinks(); valueNode.addAdditionalHyperlink(configureLink); } } else { LOG.error(e); } } } } } }); }