Пример #1
0
        public async Task TestReset()
        {
            var reset = new AutoResetSignal(1000);

            reset.Set();
            reset.Value.ShouldBe(true);
            reset.FireCount.ShouldBe(1);

            await Task.Delay(1000);

            reset.Value.ShouldBe(false);
            reset.FireCount.ShouldBe(1);

            reset.Set();
            reset.Value.ShouldBe(true);
            reset.FireCount.ShouldBe(2);

            await Task.Delay(1000);

            reset.Value.ShouldBe(true);
            reset.FireCount.ShouldBe(2);

            reset.Reset();

            reset.Value.ShouldBe(false);
            reset.FireCount.ShouldBe(2);
        }
Пример #2
0
        internal void Quit()
        {
            AutoResetSignal signal = new AutoResetSignal();

            this.scheduledTasks.Enqueue(new Tuple <Func <bool>, NullSignal>(() => false, signal));

            if (this.thread.IsAlive)
            {
                signal.Wait();
            }
        }
Пример #3
0
        internal void ScheduleAndWait(Action task)
        {
            AutoResetSignal signal = new AutoResetSignal();

            this.scheduledTasks.Enqueue(new Tuple <Func <bool>, NullSignal>(() =>
            {
                task.Invoke();
                return(true);
            }, signal));

            if (this.thread.IsAlive)
            {
                signal.Wait();
            }
        }