public void WhenClosed_Open() { var gate = new AsyncGate(); gate.Open(); ShouldBeOpen(gate); }
public void WhenOpen_Open() { var gate = new AsyncGate(open: true); gate.Open(); ShouldBeOpen(gate); }
public void Stampede() { var gate = new AsyncGate(); var herd = Enumerable .Range(0, Environment.ProcessorCount * 32) .Select(_ => Task.Run(async() => { await gate.WaitAsync(); })) .ToList(); gate.Open(); Task.WhenAll(herd); }
public void OnOpeningWhenTasksAreWaiting() { var gate = new AsyncGate(); var sign = 0; var task = Task.Run(async() => { sign = 1; await gate.WaitAsync(); sign = 2; }); WaitUntil(() => sign == 1, 100.Milliseconds()); gate.Open(); WaitUntil(() => sign == 2, 100.Milliseconds()); task.Wait(100.Milliseconds()).Should().BeTrue(); }