示例#1
0
 static async Task Writer <T>(CoyoteAsyncQueue <T> queue, IEnumerable <T> items, string taskname)
 {
     foreach (var item in items)
     {
         await queue.Enqueue(item, taskname);
     }
 }
示例#2
0
        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());
        }
示例#3
0
        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());
        }
示例#4
0
 static async Task <T> Reader <T>(CoyoteAsyncQueue <T> queue, string taskname)
 {
     return(await queue.Dequeue(taskname));
 }