Example #1
0
        public async Task OneAgentProcessForManyTickets(int ticketCount)
        {
            MainThread.Ensure();

            var           ticketRequests = new Task <AgentProcessTicket> [ticketCount];
            AgentIdentity firstIdentity  = null;

            Func <Task <AgentProcessTicket> > RequestTicketAsync = async() => {
                var ticket = await workbookApp.RequestTestTicketAsync();

                ticket.ShouldNotBeNull();

                var identity = await ticket.GetAgentIdentityAsync();

                identity.ShouldNotBeNull();

                Interlocked.CompareExchange(ref firstIdentity, identity, null);

                return(ticket);
            };

            await Task.Run(async() => {
                for (var i = 0; i < ticketRequests.Length; i++)
                {
                    ticketRequests [i] = RequestTicketAsync();
                }

                await Task.WhenAll(ticketRequests).ConfigureAwait(false);
            });

            MainThread.Ensure();

            foreach (var ticketRequest in ticketRequests)
            {
                ticketRequest.IsCompleted.ShouldBeTrue();

                var ticket   = ticketRequest.Result;
                var identity = await ticket.GetAgentIdentityAsync();

                identity.Id.ShouldEqual(firstIdentity.Id);
                identity.ShouldBeSameAs(firstIdentity);
            }

            observedAgentIdentityIds.ShouldNotContain(firstIdentity.Id);
            observedAgentIdentityIds.Add(firstIdentity.Id);

            foreach (var ticketRequest in ticketRequests)
            {
                ticketRequest.Result.Dispose();
            }
        }