Exemple #1
0
        public void Asynqueue_runs_when_queued()
        {
            var response = new TaskCompletionSource <string>();
            var q        = new Asynqueue <string>(s => response.SetResult("Hello, " + s));

            q.Send("World");

            response.Task.Wait();
            var result = response.Task.Result;

            "Hello, World".ShouldEqual(result);
        }
Exemple #2
0
        public void Asynqueue_send_is_async()
        {
            var response = new TaskCompletionSource <int>();
            var count    = 0;

            var q = new Asynqueue <int>(async i =>
            {
                await Task.Delay(10);
                response.SetResult(Interlocked.Increment(ref count));
            });

            q.Send(1);
            Interlocked.Increment(ref count).ShouldEqual(1);
            response.Task.Wait();
            response.Task.Result.ShouldEqual(2);
        }
Exemple #3
0
        private static Task <long> BuffQueue()
        {
            const int NumMessages = 1000000;
            var       countdown   = new CountdownEvent(NumMessages);
            Stopwatch w           = Stopwatch.StartNew();

            var qout = new Asynqueue <string>(_ =>
            {
                countdown.Signal();
            });

            for (var x = 0; x < NumMessages; ++x)
            {
                qout.Send("Msg " + x);
            }

            countdown.Wait();

            return(Task.FromResult(w.ElapsedMilliseconds));
        }
Exemple #4
0
        /// <summary>
        /// Demonstrate the performance of the plain messenger.
        /// </summary>
        private static async Task <long> PlainQueue()
        {
            const int NumMessages = 1000000;
            var       done        = new TaskCompletionSource <long>();
            var       count       = 0;
            Stopwatch w           = Stopwatch.StartNew();

            var qout = new Asynqueue <string>(_ =>
            {
                if (++count >= NumMessages)
                {
                    done.SetResult(w.ElapsedMilliseconds);
                }
            });

            for (var x = 0; x < NumMessages; ++x)
            {
                qout.Send("Msg " + x);
            }

            return(await done.Task);
        }