Exemplo n.º 1
0
        //14 生产者->消费者
        static async Task Worker14()
        {
            chan <int> chan = chan <int> .make(-1);//无限缓存,使用默认strand

            generator.children children = new generator.children();
            children.go(async delegate()
            {
                for (int i = 0; i < 3; i++)
                {
                    await chan.send(i);
                    await generator.sleep(1000);
                }
                chan.close();
            });
            children.go(async delegate()
            {
                for (int i = 10; i < 13; i++)
                {
                    await chan.send(i);
                    await generator.sleep(1000);
                }
                chan.close();
            });
            children.go(async delegate()
            {
                while (true)
                {
                    chan_recv_wrap <int> res = await chan.receive();
                    if (res.state == chan_state.closed)
                    {
                        Log($"chan 已关闭");
                        break;
                    }
                    Log($"recv0 {res.msg}");
                }
            });
            children.go(async delegate()
            {
                while (true)
                {
                    chan_recv_wrap <int> res = await chan.receive();
                    if (res.state == chan_state.closed)
                    {
                        Log($"chan 已关闭");
                        break;
                    }
                    Log($"recv1 {res.msg}");
                }
            });
            await children.wait_all();
        }
Exemplo n.º 2
0
 static async Task Consumer()
 {
     Console.WriteLine("receive chan1 {0}", await _chan1.receive());
     Console.WriteLine("send chan2 {0}", await _chan2.send(system_tick.get_tick_us()));
     Console.WriteLine("receive chan3 {0}", await _chan3.receive());
     while (true)
     {
         await generator.select().case_receive(_chan1, async delegate(long msg)
         {
             Console.WriteLine("select receive chan1 {0}", msg);
             await generator.sleep(100);
         }).case_send(_chan2, system_tick.get_tick_us(), async delegate()
         {
             Console.WriteLine("select send chan2");
             await generator.sleep(100);
         }).case_receive(_chan3, async delegate(long msg)
         {
             Console.WriteLine("select receive chan3 {0}", msg);
             await generator.sleep(100);
         }).case_receive(_csp, async delegate(long msg)
         {
             Console.WriteLine("select csp delay {0}", system_tick.get_tick_us() - msg);
             await generator.sleep(100);
             return(system_tick.get_tick_us());
         }).end();
     }
 }
Exemplo n.º 3
0
        //15 超时接收
        static async Task Worker15()
        {
            chan <int> chan = chan <int> .make(1);//缓存1个

            generator.children children = new generator.children();
            children.go(async delegate()
            {
                for (int i = 0; i < 3; i++)
                {
                    await chan.send(i);
                    await generator.sleep(1000);
                }
            });
            children.go(async delegate()
            {
                while (true)
                {
                    chan_recv_wrap <int> res = await chan.timed_receive(2000);
                    if (res.state == chan_state.overtime)
                    {
                        Log($"recv 超时");
                        break;
                    }
                    Log($"recv {res.msg}");
                }
            });
            await children.wait_all();
        }
Exemplo n.º 4
0
        static async Task Producer3()
        {
            while (true)
            {
                await _chan3.send(system_tick.get_tick_us());

                await generator.sleep(1000);
            }
        }
Exemplo n.º 5
0
        //18 一轮选择一个接收
        static async Task Worker18()
        {
            chan <int> chan1 = chan <int> .make(0);

            chan <int> chan2 = chan <int> .make(0);

            generator.children children = new generator.children();
            children.go(async delegate()
            {
                for (int i = 0; i < 3; i++)
                {
                    await chan1.send(i);
                    await generator.sleep(1000);
                }
                chan1.close();
            });
            children.go(async delegate()
            {
                for (int i = 10; i < 13; i++)
                {
                    await chan2.send(i);
                    await generator.sleep(1000);
                }
                chan2.close();
            });
            children.go(async delegate()
            {
                await generator.select().case_receive(chan1, async delegate(int p)
                {
                    await generator.sleep(100);
                    Log($"recv1 {p}");
                }).case_receive(chan2, async delegate(int p)
                {
                    await generator.sleep(100);
                    Log($"recv2 {p}");
                }).loop();
                Log($"chan 已关闭");
            });
            await children.wait_all();
        }