code: private void waitForAsyncSendCompletion() {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "waitForAsyncSendCompletion");
  
          while (!(_asyncSendQueue.isEmpty() && (currentAsyncSendObject == null))) {
              try {
                  synchronized (_asyncSendQueue) {
                      // after twenty second.. again check is made if the async send queue is empty.
                      //the sleep time is precautinary measure.. to avoid a futuristic scenario in which notification would not come.
                      _asyncSendQueue.wait(1000 * 20);
                  }
              } catch (InterruptedException e) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(tc, "waitForAsyncSendCompletion got interrupted", e);
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "waitForAsyncSendCompletion");
      }
docs: This function blocks till all Async sends are resolved.