private IEnumerable<Event> Customer(Environment env, string name, Resource counter, TimeSpan meanTimeInBank) { var arrive = env.Now; env.Log("{0} {1}: Here I am", arrive, name); using (var req = counter.Request()) { // Wait for the counter or abort at the end of our tether var timeout = env.TimeoutUniform(MinPatience, MaxPatience); yield return req | timeout; var wait = env.Now - arrive; if (req.IsProcessed) { // We got the counter env.Log("{0} {1}: waited {2}", env.Now, name, wait); yield return env.TimeoutExponential(meanTimeInBank); env.Log("{0} {1}: Finished", env.Now, name); } else { // We reneged env.Log("{0} {1}: RENEGED after {2}", env.Now, name, wait); } } }
private IEnumerable<Event> Source(Environment env, Resource counter) { for (int i = 0; i < NewCustomers; i++) { var c = Customer(env, "Customer " + i, counter, TimeSpan.FromMinutes(12.0)); env.Process(c); yield return env.TimeoutExponential(IntervalCustomers); } }