How to make sure void finished before proceed?

I got my code something like this :

class First(){
 void Start(){
   void1();
 }
}
class Second(){
 void Start(){
   void2();
 }
}

I am getting NullReferenceException because both class are running in same time.
But void2() is needed to wait for void1() to be complete.
How I can make sure void1 had been complete before proceed to void2?
I saw some answers that told me to make it wait so the void1 can be finished.
Or adjust the order of scripts setting in Unity.
But I want some better ways to do this instead of just wait.
(Sorry for my lack of knowledge, but I really hope to solve this.)

One simple solution would be to put void1 in Awake() and void2 in Start()

Or alternatively you could call void2 inside void1, after running your code there.

Another approach would be to use Coroutines.

Hope one of these works for you

In this case, void2 will be called after the void1 call has returned. The issue must be somewhere else
Edit: Ok so you edited the question completely, now the answer doesn’t make sense