How can I pause one object's Update() until another class has performed its task?

I’m struggling making an RPG turn-based battle system (à la early Final Fantasy), and I’m really trying to take an object-oriented approach. I have a CombatManager class attached to an object that takes all the combatants, sorts them according to each combatants’ Speed stat, and tells each combatant when he can act. However, I’ve run into a problem on that last part: How do I tell the CombatManager to stop its job for a moment so the combatant can do his job? If the combatant is the player, the program will pause and wait for input, and this could take many frames, during which the CombatManager shouldn’t do anything. Telling the player to act is simple enough (just call the player’s Act() method), but how do I pause the CombatManager then resume it when the player is done?

Upon request, here is my CombatManager. There is still much work to be done on it.

public class CombatManager : MonoBehaviour
{
	private List<Combatant> combatants;
	private Queue<Combatant> combatantsQueue;
	private bool isRunning;

	private void Awake()
	{
		combatants = new List<Combatant>();
		combatantsQueue = new Queue<Combatant>();
		isRunning = false;
	}

	private void Update()
	{
		while(isRunning)
		{
			// Run the combat.
			// Dequeue a combatant and tell it to act.
			// Add it back to the queue (at the end).
			// When it's done acting, CombatManager should be notified so it can dequeue the next combatant.
			// If a combatant is unable to act (such as when he dies), remove him from the queue.
			// Other combatants may revive him, in which case add him back to the queue.
		}
	}

	public void AddCombatant(Combatant combatant)
	{
		combatants.Add(combatant);
	}

	public void SortCombatants()
	{
		// Sort combatants by speed, highest first
		combatants = combatants.OrderByDescending(c=>c.Speed).ToList();
		foreach(var c in combatants)
		{
			// Add each combatant to the queue, starting with the fastest.
			combatantsQueue.Enqueue(c);
		}
	}

	public void StartCombat()
	{
		SortCombatants();
		isRunning = true;
	}
}

PS - Any general tips on creating an RPG turn-based battle system would be greatly appreciated, as well. I’m having a tough time conceptualizing the design taking into consideration the game loop.

public PlayerAction playerAction;

Update()

if(playerAction.booleanHasNotSelectedAction)
return;
else
// do stuff

Do nothing until the Player has selected their action (i.e return), then do whatever. This is a simple example.

Each turn I would create a list with combatants actions (for instance: player1, enemyA, player2, player3, enemyB). If any combatant has more than 2 actions in a turn, put it that amount of times in the list.

Combat manager calls the Act() method from the first element of the list.

Then, each Act() method within a combatant finishes by triggering an event in the CombatManager that makes the CombatManager pop that action from the list.

To make the CombatManager wait for the current action to complete, just check for the size of the list in the Update function of the CombatManager. If it is the same size as the last frame, it is because the current combatant hasn’t finished its action. If size of the list is smaller than last time checked (because the function triggered by the Act() method popped the first element) then call the Act() method of the folowing combatant (which is the first of the list).

Once the size of the list reaches zero, the turn has finished for all combatants.

Rince and repeat till the battle is over.

Probably not the best way to do it, but that’s how I would tackle it.