public void AddActionCommand(ActionCommandObject command)
 {
     lock (commands)
     {
         commands.Add(command);
         Sort();
     }
     OnCountChangeEvent?.Invoke();
 }
        public async void PerformAllActions()
        {
            await Task.Run(() =>
            {
                lock (commands)
                {
                    while (commands.Count > 0)
                    {
                        ActionCommandObject command = commands[0];
                        OnCommandWillStartEvent?.Invoke(command);
                        command.PerformAction();

                        commands = commands.GetRange(1, commands.Count - 1);
                        Sort();
                        OnCommandDidFinishEvent?.Invoke(command);
                        OnCountChangeEvent?.Invoke();
                    }
                }
                OnPerformEndEvent?.Invoke();
            });
        }