protected void sendAsyncRequest(
      AsyncRequestContext<?, ?, RequestType, NodeLocation> requestContext,
      int requestId,
      NodeLocation targetNode,
      int retryCount) {
    try {
      if (!actionMap.containsKey(requestContext.getRequestType())) {
        throw new UnsupportedOperationException(
            "unsupported request type "
                + requestContext.getRequestType()
                + ", please set it in AsyncRequestManager::initActionMapBuilder()");
      }
      Client client = clientManager.borrowClient(nodeLocationToEndPoint(targetNode));
      adjustClientTimeoutIfNecessary(requestContext.getRequestType(), client);
      Object req = requestContext.getRequest(requestId);
      AsyncRequestRPCHandler<?, RequestType, NodeLocation> handler =
          buildHandler(requestContext, requestId, targetNode);
      Objects.requireNonNull(actionMap.get(requestContext.getRequestType()))
          .accept(req, client, handler);
    } catch (Exception e) {
      LOGGER.warn(
          "{} failed on Node {}, because {}, retrying {}...",
          requestContext.getRequestType(),
          nodeLocationToEndPoint(targetNode),
          e.getMessage(),
          retryCount);
    }
  }
Send asynchronous requests to the specified Nodes with default retry num

<p>Notice: The Nodes that failed to receive the requests will be reconnected

@param requestContext <RequestType, ResponseType> which will also contain the result
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/client/request/AsyncRequestManager.java