static async Task Writer <T>(CoyoteAsyncQueue <T> queue, IEnumerable <T> items, string taskname) { foreach (var item in items) { await queue.Enqueue(item, taskname); } }
public static async Task Execute_TwoReadersAndWriters(ICoyoteRuntime runtime) { Action <string> log = s => runtime.Logger.WriteLine(s); var numConsumerProducer = 2; log($"Testing Queue with {numConsumerProducer} consumers and producers"); var queue = new CoyoteAsyncQueue <int>(numConsumerProducer + 1, new InterestingEvents()); var tasks = new List <Task>() { Task.Run(() => Writer(queue, Enumerable.Range(1, 10), "Task1")), Task.Run(() => Writer(queue, Enumerable.Range(10, 20), "Task2")), Task.Run(() => Reader(queue, "Task3")), Task.Run(() => Reader(queue, "Task4")), }; await Task.WhenAll(tasks.ToArray()); }
public static async Task Execute_TenReadersAndWriters(ICoyoteRuntime runtime) { Action <string> log = s => runtime.Logger.WriteLine(s); var generator = Generator.Create(); var numConsumerProducer = generator.NextInteger(10) + 1; var numConsumers = numConsumerProducer; var numProducers = numConsumerProducer; log($"Testing Queue with {numConsumerProducer} consumers and producers"); var queue = new CoyoteAsyncQueue <int>(numConsumerProducer, new InterestingEvents()); var tasks = Chop(RandomStream(generator, 100), numProducers) .Select((x, i) => { var t = Task.Run(() => Writer(queue, x, $"Task{i}")); i++; return(t); }) .ToList(); for (int i = 0; i < numProducers; i++) { tasks.Add(Task.Run(() => Reader(queue, ""))); } await Task.WhenAll(tasks.ToArray()); }
static async Task <T> Reader <T>(CoyoteAsyncQueue <T> queue, string taskname) { return(await queue.Dequeue(taskname)); }