public void cancelCommunication(final SubLWorker worker) throws IOException {
    final Integer id = worker.getId();
    if (id.intValue() < 0) {
      //@note serial communications cannot be canceled right now
      return;
    }
    final String command = "(fif (" + "terminate-active-task-process"
            + " " + worker.getId() + " \"" + uuid + "\" " + ":cancel"
            + ") '(ignore) '(ignore))";
    converse(cycAccess.makeCycList(command));
    // the SubL implementation of CANCEL will send a CANCEL event back,
    // which will cleanup the waiting thread info and signal the termination 
    // event, so no need to perform event signaling and cleanup
  }