private IEnumerator Wrap(Func<IEnumerator> coroutine)
        {
            SafeCoroutine safeCoroutine = new SafeCoroutine();

              IEnumerator i = null;

              try {
            i = coroutine();
              } catch (Exception exception) {
            Handle(exception);
              }

              if (i != null) {
            safeCoroutine.Coroutine = StartCoroutine(safeCoroutine.RunCoroutine(i));
            yield return safeCoroutine.Coroutine;
              }

              if (safeCoroutine.Exception != null) {
            Handle(safeCoroutine.Exception);
              }
        }
        private IEnumerator Wrap(CoroutineChainLink link)
        {
            SafeCoroutine safeCoroutine = new SafeCoroutine();
              safeCoroutine.Coroutine = StartCoroutine(safeCoroutine.RunCoroutine(link.CoOnStart()));
              yield return safeCoroutine.Coroutine;

              if (safeCoroutine.Exception != null) {
            link.OnFailure(safeCoroutine.Exception);
              }
        }