Ejemplo n.º 1
0
            public async Task Run()
            {
                Console.WriteLine("*** test 1");
                {
                    StreamSink <string> s1 = Stream.CreateSink <string>();
                    TaskWithListener    t1 = s1.ListenOnceAsync(t => t.ContinueWith(t2 => Console.WriteLine(t2.Result), TaskContinuationOptions.ExecuteSynchronously));
                    s1.Send("Early");
                    await Task.Delay(500);

                    Console.WriteLine("Before await");
                    await t1;
                    Console.WriteLine("After await");
                }

                Console.WriteLine();

                Console.WriteLine("*** test 2");
                {
                    StreamSink <string>       s1 = Stream.CreateSink <string>();
                    TaskWithListener <string> t1 = s1.ListenOnceAsync();
                    s1.Send("Late");
                    await Task.Delay(500);

                    Console.WriteLine("Before await");
                    Console.WriteLine(await t1);
                    Console.WriteLine("After await");
                }
            }
Ejemplo n.º 2
0
            public async Task Run()
            {
                Console.WriteLine("*** Simple test");
                {
                    StreamSink <string>       sa = Stream.CreateSink <string>();
                    StreamSink <string>       sb = Stream.CreateSink <string>();
                    TaskWithListener <string> ta = sa.ListenOnceAsync();
                    TaskWithListener <string> tb = sb.ListenOnceAsync();
                    sa.Send("Hello");
                    sb.Send("World");
                    Console.WriteLine(await ta + " " + await tb);
                }

                Console.WriteLine();

                Console.WriteLine("*** Simultaneous case");
                {
                    StreamSink <string>       sa = Stream.CreateSink <string>();
                    StreamSink <string>       sb = Stream.CreateSink <string>();
                    TaskWithListener <string> ta = sa.ListenOnceAsync();
                    TaskWithListener <string> tb = sb.ListenOnceAsync();
                    Transaction.RunVoid(() =>
                    {
                        sa.Send("Hello");
                        sb.Send("World");
                    });
                    Console.WriteLine(await ta + " " + await tb);
                }
            }
Ejemplo n.º 3
0
        public async Task TestListenOnceAsyncSameThread()
        {
            StreamSink <char>       s = Stream.CreateSink <char>();
            TaskWithListener <char> t = s.ListenOnceAsync();

            s.Send('A');
            s.Send('B');
            s.Send('C');
            char r = await t;

            Assert.AreEqual('A', r);
        }
Ejemplo n.º 4
0
        public async Task TestListenOnceAsyncModify()
        {
            StreamSink <char>       s = Stream.CreateSink <char>();
            TaskWithListener <char> t = s.ListenOnceAsync(async t2 => await t2.ConfigureAwait(false));

            GC.Collect(0, GCCollectionMode.Forced);
            s.Send('A');
            s.Send('B');
            s.Send('C');
            char r = await t;

            Assert.AreEqual('A', r);
        }
Ejemplo n.º 5
0
        public async Task TestListenOnceAsyncSameThreadWithCleanup()
        {
            StreamSink <char>       s = Stream.CreateSink <char>();
            TaskWithListener <char> t = s.ListenOnceAsync();

            GC.Collect(0, GCCollectionMode.Forced);
            s.Send('A');
            s.Send('B');
            s.Send('C');
            char r = await t;

            Assert.AreEqual('A', r);
        }
Ejemplo n.º 6
0
        public async Task TestListenOnceAsyncModifyVoid2()
        {
            char r = ' ';
            StreamSink <char> s = Stream.CreateSink <char>();
            TaskWithListener  t = s.ListenOnceAsync(t2 => t2.ContinueWith(t3 => r = t3.Result, TaskContinuationOptions.ExecuteSynchronously));

            GC.Collect(0, GCCollectionMode.Forced);
            s.Send('A');
            s.Send('B');
            s.Send('C');
            await t;

            Assert.AreEqual('A', r);
        }
Ejemplo n.º 7
0
            public async Task Run()
            {
                Console.WriteLine("*** test");
                {
                    StreamSink <string>       s1 = Stream.CreateSink <string>();
                    TaskWithListener <string> t1 = s1.ListenOnceAsync();

                    new Thread(() =>
                    {
                        s1.Send("Sent");
                    }).Start();

                    Console.WriteLine(await t1);
                }
            }