public static void SignalAndWaitUnconditionally()
        {
            using var trigger = new AsyncTrigger();
            var waitTask = trigger.SignalAndWaitAsync();

            False(waitTask.IsCompleted);
            var waitTask2 = trigger.SignalAndWaitAsync();

            True(waitTask.IsCompletedSuccessfully);
            False(waitTask2.IsCompleted);
            trigger.Signal();
            True(waitTask2.IsCompletedSuccessfully);
        }
        public static void SignalAndWait()
        {
            var state = new State {
                Value = 10
            };

            using var trigger = new AsyncTrigger();
            var waitTask = trigger.SignalAndWaitAsync(state, i => i.Value == 42);

            False(waitTask.IsCompleted);
            Equal(10, state.Value);
            state.Value = 42;
            trigger.Signal(state);
            True(waitTask.IsCompletedSuccessfully);
            Equal(42, state.Value);
        }