Pair programming for sure. Senior designs the code, junior writes it. Senior doesn't touch keyboard. It's real time code reviewing. The senior's time is rarely wasted. They can always do time consuming high level work like designing test cases, planning out the next part of the work, seeing if the API supports stuff.
Your company has to have the right culture for this. Companies like this are rare. Most just assign whatever's in the queue to whomever's going to take it, meaning that everyone has "something" to do at all times.
Pair programming makes total sense when tasks are owned by the team. In that case it's in everyone's interest to improve the team's overall velocity. That means time spent mentoring juniors or working together on tasks is well spent.
When tasks are owned by individuals, it's in everyone's interest to increase their own velocity which means maximizing time spent working on their own tasks. People are disincentivized from helping other people complete their work or mentoring them, because that directly reduces your personal velocity.