@Override
		public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
			if (OBJECT_HASHCODE.equals(method)) {
				return System.identityHashCode(proxy);
			}
			executor.execute(() -> {
				try {
					method.invoke(out, args);
				}
				catch (InvocationTargetException e) {
					Throwable cause = e.getCause();
					errorHandler.handleError(out, cause);
				}
				catch (Throwable e) {
					errorHandler.handleError(out, e);
				}
			});
			return null; // Assumes void return type
		}
A listener which queues invocations onto a separate executor

@param <P> the type of listener
Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/datastruct/PrivatelyQueuedListener.java