public static Task WhenStateIs(this ProcessSupervisor processSupervisor, ProcessSupervisor.State processState)
        {
            var taskCompletionSource = new TaskCompletionSource <int>();

            void Handler(ProcessSupervisor.State state)
            {
                if (processState == state)
                {
                    taskCompletionSource.SetResult(0);
                    processSupervisor.StateChanged -= Handler;
                }
            }

            processSupervisor.StateChanged += Handler;
            return(taskCompletionSource.Task);
        }
        public static Task WhenStateIs(
            this ProcessSupervisor processSupervisor,
            ProcessSupervisor.State processState,
            CancellationToken cancellationToken = default)
        {
            var taskCompletionSource = new TaskCompletionSource <int>();

            cancellationToken.Register(() => taskCompletionSource.TrySetCanceled());

            void Handler(ProcessSupervisor.State state)
            {
                if (processState == state)
                {
                    taskCompletionSource.SetResult(0);
                    processSupervisor.StateChanged -= Handler;
                }
            }

            processSupervisor.StateChanged += Handler;

            return(taskCompletionSource.Task);
        }