How do I replace Invoke Repeating to allow a repeat rate change

I am making a matching game like simon. I currently have everything working, and I am using Invoke Repeating in the start method to call my display method to change the click objects

void Start () 
{
ResetGame();
InvokeRepeating("Display", 2, repeatInterval); 
}

ResetGame setting the game state to the beginning

then Update simply calls a method to make the first light, and change the state to diplay that the repeating Display function is looking for.

void Update () 
	{	
	if (currentState == Ready)
		{
			Add();
		}
		
	}

Now what I would like to do is be able to change the repeat interval variable when certain conditions are met, but when I change this variable with code there is no increase in speed, I assume do to everything being setup at Start and never called again.

I have tried moving the call to update but it gets called so often the game becomes unplayable fast.

How/Where would I make my display(0 function call to get it to repeat in the same manner as Invoke repeating , but allow the repeatrate (repeatInterval) to be changed when conditions are met?

Thanks for your help in advance

This is just off the top of my head so there might be silly things I missed.

Essentially you’ve got to ask constantly ‘is this function ready to run? if it is, run it and reset its timer’ and you also need a way to change its timer:

using System.Collections.Generic;

class MyRepeater {
  public delegate void RepeaterFunction();
  public RepeaterFunction function;
  public float timer;
  public float repeatTime;

  public MyRepeater(RepeaterFunction f, float time) {
    if ( null == repeaters ) repeaters = new ...;
    repeaters.Add(f, this); // haha
    repeatTime = time;
  }

  public static Dictionary<RepeaterFunction,MyRepeater> repeaters;
}

void Start() {
  MyRepeater repeater = new MyRepeater(TheFunction, 1.0f);
}

void TheFunction() {
  Debug.Log("Called function");
}

void Update() {
  foreach(MyRepeater mr in MyRepeater.repeaters.Values) {
    mr.timer-= Time.deltaTime;
    if ( mr.timer <= 0 ) {
      mr.function();
      mr.timer = mr.repeatTime;
    }
  }
}

void ChangeTime(MyRepeater.RepeaterFunction function, float newTime) {
  MyRepeater.repeaters[function].repeatTime = newTime;
}