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(); }
private static void ShouldBeOpen(AsyncGate gate) { gate.IsOpen.Should().BeTrue(); gate.WaitAsync().Wait(millisecondsTimeout: 100).Should().BeTrue(); }