code: public boolean execute() {
          try {
              coroutine.run(continuation);
              continuation.successExecutionCycle();
          } catch (Exception e) {
              continuation.failedExecutionCycle();
              throw new CoroutineException("Exception thrown during execution", e);
          }
          
          // if mode was not set to SAVING after return, it means the method finished executing
          if (continuation.getMode() != Continuation.MODE_SAVING) {
              continuation.reset(); // clear methodstates + set to normal
              return false;
          } else {
              continuation.setMode(Continuation.MODE_LOADING); // set to loading for next invokation
              return true;
          }
      }
docs: Starts/resumes execution of this coroutine. If the coroutine being executed reaches a suspension point (meaning that the method calls
  {@link Continuation#suspend() }), this method will return {@code true}. If the coroutine has finished executing, this method will
  return {@code false}.
  <p>
  Calling this method again after the coroutine has finished executing will restart the coroutine.
  @return {@code false} if execution has completed (the method has return), {@code true} if execution was suspended.
  @throws CoroutineException an exception occurred during execution of this coroutine, the saved execution stack and object state may
  be out of sync at this point (meaning that unless you know what you're doing, you should not call {@link CoroutineRunner#execute() }
  again)