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); }
internal void Quit() { AutoResetSignal signal = new AutoResetSignal(); this.scheduledTasks.Enqueue(new Tuple <Func <bool>, NullSignal>(() => false, signal)); if (this.thread.IsAlive) { signal.Wait(); } }
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(); } }