zoukankan      html  css  js  c++  java
  • 对C# .Net4.5异步机制测试(二)——加深印象

            public static void Main()
            {
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
                In();
                Console.WriteLine("run after in");
                Console.Read();
            }
    
            public static async void In()
            {
                var name=Name();
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
                Console.WriteLine("{0} run in {1}",Thread.CurrentThread.ManagedThreadId, await name );
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
    
            }
    
            public static async Task<string> Name()
            {
                var res = Task.Run(() => {
                    Thread.Sleep(10000);
                    Console.WriteLine("Child is {0}",Thread.CurrentThread.ManagedThreadId);
                    return "jacket";
                });
                return await res;
            }

    运行结果:

    1
    1
    run after in //整个顺序是Main->In->Name,然后在Name返回处直接跳出,执行var name=Name();下面代码,执行下去后遇到await name再次跳出,执行In()下方代码其他代码由Task线程执行。首先await的使用是最外层一定要套一个async函数,个人认为保证了不会跳出Main()函数。
    Child is 3
    1 run in jacket //Console.WriteLine("{0} run in {1}",await name,Thread.CurrentThread.ManagedThreadId);的执行结果是jacket run in 1.说明同一语句都能拆分到不同线程里执行啊
    3
    少壮不识cpp,老大方知cpp可怕
  • 相关阅读:
    day 48
    40 协程 多路复用
    JQuery
    JS DOMBOM
    psotgres、timescaledb
    crontab命令
    Go语言结构体和方法
    Go语言锁的使用
    Go语言map数据结构
    ZOJ 3777 Problem Arrangement
  • 原文地址:https://www.cnblogs.com/Jacket-K/p/8667919.html
Copyright © 2011-2022 走看看