public async Task StartAsync()
 {
     HasStarted = true;
     while (OnStartingCallbacks.Count > 0)
     {
         (Func <object, Task> callback, object state) = OnStartingCallbacks.Dequeue();
         if (callback != null)
         {
             await callback.Invoke(state).ConfigureAwait(false);
         }
     }
 }